这段代码:
Type.GetType("namespace.a.b.ClassName")
返回null。
我在使用:
using namespace.a.b;
类型是存在的,它在不同的类库中,我需要通过它的名字string来获取它。
这段代码:
Type.GetType("namespace.a.b.ClassName")
返回null。
我在使用:
using namespace.a.b;
类型是存在的,它在不同的类库中,我需要通过它的名字string来获取它。
当前回答
对我来说,“+”是关键! 这是我的类(它是一个嵌套的):
namespace PortalServices
{
public class PortalManagement : WebService
{
public class Merchant
{}
}
}
这行代码起作用了:
Type type = Type.GetType("PortalServices.PortalManagement+Merchant");
其他回答
尝试使用包含程序集信息的完整类型名称,例如:
string typeName = @"MyCompany.MyApp.MyDomain.MyClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
Type myClassType = Type.GetType(typeName);
当我只使用名称空间时,也遇到了同样的情况。Classname来获取不同程序集中的类类型,这将不起作用。只有在如上所示的类型字符串中包含程序集信息时才有效。
type . gettype ("namespace.qualified.TypeName")仅在mscorlib.dll或当前正在执行的程序集中找到该类型时才有效。
如果这两种情况都不是真的,你将需要一个程序集限定的名称:
Type.GetType("namespace.qualified.TypeName, Assembly.Name")
试试这个方法。
public static Type GetType(string typeName)
{
var type = Type.GetType(typeName);
if (type != null) return type;
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
type = a.GetType(typeName);
if (type != null)
return type;
}
return null;
}
对我来说,“+”是关键! 这是我的类(它是一个嵌套的):
namespace PortalServices
{
public class PortalManagement : WebService
{
public class Merchant
{}
}
}
这行代码起作用了:
Type type = Type.GetType("PortalServices.PortalManagement+Merchant");
你也可以得到不带程序集限定名但带有dll名的类型,例如:
Type myClassType = Type.GetType("TypeName,DllName");
我也遇到过同样的情况,这招对我很管用。我需要一个DataModel类型的对象。QueueObject”,并有一个引用“DataModel”,所以我得到的类型如下:
Type type = Type.GetType("DataModel.QueueObject,DataModel");
逗号后的第二个字符串是引用名称(dll名称)。