【UWP】開發小技巧――判斷類是否存在
不要問我這個需求是怎么冒出來的,自己沒事找事要支持 10240,結果發現啥都不支持,真是太糟糕了。
一般而言,這類需求都是想辦法通過類名新建對象,一開始我也是這么想的,不過網上那些教程都是單純 .NET 的,不支持 UWP (也可能是我太菜了,不會用),所以直接白嫖是不可能了。。。

不過判斷是否存在不需要這么復雜,C# 有專門的 GetType 方法來找類,所以事情就簡單了,直接 Type.GetType("類名") 就行了,不過真的是這樣嗎?

經過調試,并沒有成功找到這個類型,不過不止 Type 有 GetType ,在 C# 中 Assembly 也有 GetType ,我直接找到要找的類的程序集再找類應該就能找到了吧。

很明顯,這個方案才是對的。現在知道了方法,就搓個函數出來吧。
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 不支持和類在不在程序集里好像沒關系吧。。。

我們似乎還是要新建一個對象來判斷它到底是不是支持,于是函數就變成這樣了。。。
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,肯定比這個好用

本文來自博客園,作者:where-where,轉載請注明原文鏈接:http://www.rzrgm.cn/wherewhere/p/15781449.html

浙公網安備 33010602011771號