这段代码:
Type.GetType("namespace.a.b.ClassName")
返回null。
我在使用:
using namespace.a.b;
类型是存在的,它在不同的类库中,我需要通过它的名字string来获取它。
这段代码:
Type.GetType("namespace.a.b.ClassName")
返回null。
我在使用:
using namespace.a.b;
类型是存在的,它在不同的类库中,我需要通过它的名字string来获取它。
当前回答
如果它是一个嵌套类型,您可能会忘记转换。到a +
不管怎样,typeof(T).FullName会告诉你应该说什么
编辑:顺便说一句,这些用法(我相信你知道)只是编译时对编译器的指令,因此不会对API调用的成功产生任何影响。(如果你有项目或装配的参考资料,可能会有潜在的影响-因此信息不是无用的,只是需要一些过滤…)
其他回答
如果程序集被引用并且Class可见:
typeof(namespace.a.b.ClassName)
GetType返回null,因为没有找到类型,使用typeof,编译器可以帮助你找出错误。
如果程序集是构建ASP的一部分。NET应用程序,你可以使用BuildManager类:
using System.Web.Compilation
...
BuildManager.GetType(typeName, false);
当我只有类名时,我使用这个:
Type obj = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes()).Where(t => String.Equals(t.Name, _viewModelName, StringComparison.Ordinal)).First();
对我来说,“+”是关键! 这是我的类(它是一个嵌套的):
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来获取不同程序集中的类类型,这将不起作用。只有在如上所示的类型字符串中包含程序集信息时才有效。