代码之家  ›  专栏  ›  技术社区  ›  Steinbitglis

能否在C#中实例化泛型类型参数的嵌套类型?

  •  3
  • Steinbitglis  · 技术社区  · 8 年前

    下面的代码导致了一个编译器错误,我认为这是不必要的。有好的解决方法吗?

    错误CS0704:无法通过类型参数“T”指定嵌套类型

    public class Base<T>
    {
        public T genericData;
        public Nested data;
        public class Nested
        {
        }
    
        public static B Create<B>() where B : Base<T>, new() {
            var result = new B();
            result.data = default(B.Nested);
            return result;
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  6
  •   MakePeaceGreatAgain    8 年前

    那么,完整的名称 Nested 实际上是 Base<T>.Nested ,没有其他内容。这个 嵌套的 -类因此属于 Base<T> -类而不是其子类。因此,写下以下内容:

    result.data = default(Base<T>.Nested);
    

    然而 基础(<);T> -限定符是多余的,因为代码已经 在那个级别内。所以你也可以用这个:

    result.data = default(Nested);
    

    除此之外,您还可以使用 result.Data = null 基础(<);T> 是引用类型,默认为 null .