我刚刚发现Type.GetInterface和嵌套Types的行为非常奇怪。
以下示例代码将显示问题,我正在使用接口(interface)的Type.FullName来检查给定类型是否从该接口(interface)派生:
public interface IStandardInterface {}
public class StandardClass : IStandardInterface {}
class Program
{
public interface INestedInterface {}
public class NestedClass : INestedInterface { }
static void Main()
{
var stdIfName = typeof (IStandardInterface).FullName;
var nestedIfName = typeof (INestedInterface).FullName;
var std = typeof(StandardClass).GetInterface(stdIfName);
var nested = typeof(NestedClass).GetInterface(nestedIfName);
}
}
如果我执行上述代码,则它适用于StandardClass,但不适用于NestedClass。
这是预期的行为还是错误?如果可以预期,您能解释为什么吗?
我使用.net Framework 3.5 SP1。
最佳答案
扩展马克的答案。
尽管没有记录,但GetInterface API会根据最后一个“”的位置分解您传递的名称。在名字里。一切都在“。”的右边。将假定为所讨论接口(interface)的简称。
这给嵌套类型带来了一个问题,因为它们的名称为“ContainingTypeName + NestedTypeName”。因此,当您将全名传递给GetInterface时,它实际上最终会找到找不到的名为“Program + INestedInterface”的接口(interface)。
关于.net - Type.GetInterface和嵌套类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/528546/