gpt4 book ai didi

reflection - 当类型作为字符串提供时获取类型

转载 作者:行者123 更新时间:2023-12-05 05:27:06 25 4
gpt4 key购买 nike

我知道 C# 是一种静态类型的语言,我已经阅读了这个 SO 帖子的答案: initialize a class by string variable in c#?

不过,我的问题有点不同。我正在使用一个 T4 模板,它为我提供了一个类的名称作为字符串参数。我会在这里给出模板代码,但重要的是类型在字符串中,因此它与在任何 C# 模块中使用此语句相同:

string s = "MyNamespace.Customer.Model";

使用该字符串,我需要将类型放入 Type 变量中。通常,当我有权访问实际类型时,我会使用此代码:

Type typeModel = typeof(MyNamespace.Customer.Model);

我怎样才能获得给定字符串的类型?换句话说,我的代码理想情况下看起来像这样(我知道这行不通,因为“s”是一个字符串):

Type typeModel = typeof(s);

(顺便说一句,我确实知道该类型在哪个程序集中,所以我可以使用该信息;此外,模板引用了包含相关类型的程序集,这有什么值(value)……)

注意:我不想创建 Type 的对象实例,所以请不要建议需要使用 Activator.CreateInstance 的解决方案,除非那是唯一的解决方案...

感谢您提供的任何想法。

最佳答案

方法Type.GetType(string typeName)做你想做的,但如果你只提供 FullName (命名空间和名称)的类型,它只会解析当前程序集或 mscorlib 中的类型。

您需要提供 AssemblyQualifiedName如果要解析当前程序集之外的类型。问题当然是多个程序集可以包含具有相同名称和命名空间的不同类型(感谢 Steven Liekens):

string aqn = Assembly.CreateQualifiedName(assemblyName, namespaceAndNameOfType);
Type t = Type.GetType(aqn);

如果您事先不知道程序集,您可以通过以下方式处理:

然后遍历每个程序集的 GetTypes()方法。

关于reflection - 当类型作为字符串提供时获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21900585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com