【UWP】开发小技巧――判断类是否存在

【UWP】开发小技巧――判断类是否存在

#UWP# #爱编程# #电脑玩家#

不要问我这个需求是怎么冒出来的,自己没事找事要支持 10240,结果发现啥都不支持,真是太糟糕了。

一般而言,这类需求都是想办法通过类名新建对象,一开始我也是这么想的,不过网上那些教程都是单纯 .NET 的,不支持 UWP (也可能是我太菜了,不会用),所以直接白嫖是不可能了。。。

示例

不过判断是否存在不需要这么复杂,C# 有专门的 GetType 方法来找类,所以事情就简单了,直接 Type.GetType("类名") 就行了,不过真的是这样吗?

Type.GetType()

经过调试,并没有成功找到这个类型,不过不止 TypeGetType ,在 C# 中 Assembly 也有 GetType ,我直接找到要找的类的程序集再找类应该就能找到了吧。

Assembly.GetType()

很明显,这个方案才是对的。现在知道了方法,就搓个函数出来吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
public static bool IsTypePresent(string AssemblyName, string TypeName)
{
try
{
Assembly asmb = Assembly.Load(new AssemblyName(AssemblyName));
Type supType = asmb.GetType($"{AssemblyName}.{TypeName}");
return supType != null;
}
catch
{
return false;
}
}

额,好像不太对,10240 不支持和类在不在程序集里好像没关系吧。。。

调试

我们似乎还是要新建一个对象来判断它到底是不是支持,于是函数就变成这样了。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static bool IsTypePresent(string AssemblyName, string TypeName)
{
try
{
Assembly asmb = Assembly.Load(new AssemblyName(AssemblyName));
Type supType = asmb.GetType($"{AssemblyName}.{TypeName}");
if (supType != null)
{
try { Activator.CreateInstance(supType); }
catch (MissingMethodException) { }
}
return supType != null;
}
catch
{
return false;
}
}

终于正常了。。。

判断 API 是否存在就不要用这个方法了,官方有 ApiInformation,肯定比这个好用

ApiInformation

哦对了,记得把函数放在要用的项目里,不要问我怎么知道的。。。

【UWP】开发小技巧――判断类是否存在 作者 @wherewhere 2021年12月19日 发表于 酷安,转载请注明出处