【问题标题】:How to get the type for a class by sending just the name of the class instead of the class itself as the parameter?如何通过仅发送类的名称而不是类本身作为参数来获取类的类型?
【发布时间】:2010-11-27 12:53:25
【问题描述】:

Dim a as Type=GetType(className) 将给我类型。但我只有类的名称作为字符串。我想要像 GetType("class1") 这样可以返回类型的东西。

【问题讨论】:

    标签: c# vb.net reflection dynamic


    【解决方案1】:
    Type.GetType("class1")
    

    【讨论】:

    • @Peter,当然,但这正是我们所要求的。更重要的是,它仅适用于 mscorlib 或包含对 Type.GetType 的调用的程序集中定义的类型。
    【解决方案2】:

    Type.GetType(...) 和 Assembly.GetType(...) 都需要一个完全限定的类型名称。因此,只传入类名而不传入其命名空间不会产生类型。

    如果您确保包含这样的命名空间:

    Type.GetType("Fully.Qualified.Namespace.class1")
    

    将产生与 GetType(class1) 相同的结果。

    更新:如果你不知道你的类的命名空间,你可以对当前程序集中的类型进行搜索(注意使用 Linq):

    GetType().Assembly.GetTypes().First(type => type.Name == "AssemblyModuleTests")
    

    我认为这比使用完全限定名称查找类型要慢,因为 GetTypes() 会枚举程序集中的所有类型。

    【讨论】:

    • 您可以将第二个查询与 AppDomain.CurrentDomain.GetAssemblies() 结合起来以增加搜索范围...
    • @Roger - 当然。但是,它会增加更多的负担,因为您将在所有加载的程序集中加载所有可能的类型。因此,如果不了解更多有关该场景的信息,我不会推荐它...
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2011-04-07
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2017-08-02
    相关资源
    最近更新 更多