我在我的(巨大的).NET 4项目中遇到了一个奇怪的行为.在代码中的某个时刻,我指的是一个完全限定的类型,比如说:
System.Type type = typeof (Foo.Bar.Xyz);
Run Code Online (Sandbox Code Playgroud)
稍后,我这样做:
System.Type type = System.Type.GetType ("Foo.Bar.Xyz");
Run Code Online (Sandbox Code Playgroud)
然后我回来了null.我无法理解为什么会发生这种情况,因为我的类型名称是正确的,我已经检查过其他类型并且它们得到了正确的解决.此外,以下LINQ查询查找类型:
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies ()
from assemblyType in assembly.GetTypes ()
where assemblyType.FullName == typeName
select assemblyType;
System.Type type = types.FirstOrDefault ();
Run Code Online (Sandbox Code Playgroud)
有什么理由System.Type.GetType可以失败吗?
我终于不得不求助于这段代码而不是GetType:
System.Type MyGetType(string typeName)
{
System.Type type = System.Type.GetType (typeName);
if (type == null)
{
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies ()
from assemblyType in assembly.GetTypes ()
where assemblyType.FullName == typeName
select assemblyType;
type …Run Code Online (Sandbox Code Playgroud) 我想使用反射来获取提供的命名空间和类型的程序集.我更愿意将它们作为字符串提供.需要注意的是空间和类型在装配中定义这可能是重要的其他比正在执行这段代码的人,但执行代码程序集确实有一个参考给其他组件.
我的问题是为什么静态GetType(string)方法返回null,而如果我硬编码命名空间和类并使用if语句中的typeof(),我得到所需的结果?
这是代码:
string fullClassName = "MyNameSpace.MyClass";
Type t = Type.GetType( fullClassName ); // this returns null!
if ( t == null )
{
t = typeof(MyNameSpace.MyClass); // this returns a valid type!
}
Run Code Online (Sandbox Code Playgroud)
感谢您的任何见解......