Nic*_*ron 5 c# types case-insensitive objectinstantiation windows-runtime
从microsoft文档,Type.GetType在.NET 4.5中可以不区分大小写.不幸的是,这在WinRT(Metro/Modern UI/Store应用程序)中不可用.
有一个已知的解决方法吗?因为我必须从协议中实例化对象,所有协议都具有大写的字符串表示形式.
示例:从"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
}
Run Code Online (Sandbox Code Playgroud)
编辑:看到这些都在同一名称空间,你可以轻松过滤:
var typeMap = someAssembly.GetTypes()
.Where(t => t.Namespace == "Foo.Bar")
.ToDictionary(t => t.Name, t => t,
StringComparer.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)