我刚刚发现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。
  • std的值为typeof(IStandardInterface)
  • 嵌套的
  • 的值为


  • 这是预期的行为还是错误?如果可以预期,您能解释为什么吗?

    我使用.net Framework 3.5 SP1。

    最佳答案

    扩展马克的答案。

    尽管没有记录,但GetInterface API会根据最后一个“”的位置分解您传递的名称。在名字里。一切都在“。”的右边。将假定为所讨论接口(interface)的简称。

    这给嵌套类型带来了一个问题,因为它们的名称为“ContainingTypeName + NestedTypeName”。因此,当您将全名传递给GetInterface时,它实际上最终会找到找不到的名为“Program + INestedInterface”的接口(interface)。

    关于.net - Type.GetInterface和嵌套类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/528546/

    10-11 02:01