c# - Type.GetType 不区分大小写 - WinRT

标签 c# types windows-runtime case-insensitive objectinstantiation

来自 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/

相关文章:

c# - 应自定义 MEF 的哪些部分以在分布式应用程序中动态加载插件

c# - 未知类型的 LINQ Where 表达式

c# - 是否可以在 C# 中遍历存储在服务器上的所有 session

c# - 使用 roslyn 确定基元类型

java - 如何使用android ble接口(interface)作为结构发送uint8和uint32数据

javascript - 如何在 JavaScript 中引用 Arguments 类?

visual-studio-2013 - WinRT App 的软件包系列安装了多个软件包。

c# - 按字符串创建类的实例,但要考虑隐式转换 - C# 反射

c++ - 如何在 WinRT 下的并行线程中执行 C++ 函数?

windows-runtime - 如何安装 WinRT 侧加载构建或包