你知道你正在加載類型的程序集嗎?如果是這樣,您可以通過調用Assembly.GetTypes()
一次創建不區分大小寫的Dictionary<string, Type>
(使用StringComparer.OrdinalIgnoreCase
)。那麼你就需要使用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);
@NicolasVoron:它爲什麼會痛苦?那裏有多少種類型,你有多少種? (我假設你是通過名字獲取許多不同類型的。) –
嗯......完全誤解了你的答案。對於那個很抱歉。這是一個非常好的解決方案。您的編輯完全符合我的需求;)非常感謝! –