来自 microsoft documentation , Type.GetType
在 .NET 4.5 中可以不区分大小写。遗憾的是,这在 WinRT(Metro/Modern UI/Store 应用程序)中不可用。
是否有已知的解决方法?因为我必须从一个协议(protocol)中实例化对象,该协议(protocol)的所有字符串表示都是大写的。
示例:从“MYOBJECT”,我必须实例化 MyObject
。
我目前使用 Activator.CreateInstance(Type.GetType("MYOBJECT"))
,但由于区分大小写,它不起作用。
谢谢
最佳答案
您知道要从中加载类型的程序集吗?如果是这样,您可以创建一个不区分大小写的 Dictionary<string, Type>
(使用 StringComparer.OrdinalIgnoreCase
)通过调用 Assembly.GetTypes()
一次。那么你不需要使用 Type.GetType()
完全没有 - 只需查阅字典:
// You'd probably do this once and cache it, of course...
var typeMap = someAssembly.GetTypes()
.ToDictionary(t => t.FullName, t => t,
StringComparer.OrdinalIgnoreCase);
...
Type type;
if (typeMap.TryGetValue(name, out type))
{
...
}
else
{
// Type not found
}
编辑:看到这些都在同一个命名空间中,您可以轻松过滤:
var typeMap = someAssembly.GetTypes()
.Where(t => t.Namespace == "Foo.Bar")
.ToDictionary(t => t.Name, t => t,
StringComparer.OrdinalIgnoreCase);
关于c# - Type.GetType 不区分大小写 - WinRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13088870/