Type.GetType不区分大小写 - WinRT

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")),但由于区分大小写,它不起作用.

谢谢

Jon*_*eet 5

你知道你正在装载类型的装配吗?如果是这样,您可以通过调用一次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)