如何动态获取typeof()

时间:2014-09-02 13:52:54

标签: c#

我使用此代码从我的班级Index

获取特定属性
_PropertyInfo info = typeof (IndexViewModel).GetProperty("Header");

我可以以某种方式使用typeof () - 部分并通过传入字符串动态获取类型吗?我的例子显示了我想要做的事情。

string model = "IndexViewModel";
_PropertyInfo info = typeof (model).GetProperty("Header");

3 个答案:

答案 0 :(得分:3)

您可以使用Type.GetType方法获取给定字符串的Type实例。但请注意,该方法需要assembly qualified名称。这意味着您需要传递名称空间+类型名称。例如,Type.GetType("String")返回 null ,但Type.GetType("System.String")返回string类的类型。当然,程序集限定名称不只是名称空间+类型名称,请参阅documentation以了解更多内容。

答案 1 :(得分:1)

如果您没有完全限定名称,可以遍历程序集以查找类似的类型:

public static Type GetType(string typeName)
  {
    var assemblies = AppDomain.CurrentDomain.GetAssemblies();

    foreach (var assembly in assemblies)
      {
        var allTypes = assembly.GetTypes();
        var type = allTypes.FirstOrDefault(t => t.Name == typeName);
        if (type != null)
          {
             return type;
          }
      }

    throw new KeyNotFoundException("Can't find type");
  }

答案 2 :(得分:0)

尝试使用Type.GetType方法