【问题标题】:How to use an alias type as a generic type parameter in C# [duplicate]如何在 C# 中使用别名类型作为泛型类型参数 [重复]
【发布时间】:2018-01-04 02:22:33
【问题描述】:

如何将using 定义的别名类型传递给泛型类?

我尝试了以下代码:

using ID = Int32; // it might be replaced with `String`.
using CC = C<ID>;

public class C<T> {
    T id;
}

会报错:

错误 CS0246 找不到类型或命名空间名称“ID”(是 您缺少 using 指令或程序集引用?)

但是 using 指令就在发生错误的行的正上方。 我错过了什么吗?

【问题讨论】:

  • 你想达到什么目的?
  • 目前这个好像不行,请看第一条评论here
  • 虽然链接的副本引用了规范,但有一种解决方法,在外部命名空间中声明ID,在内部命名空间中声明CC。他们在同一个命名空间中的事实是这里的问题。

标签: c# generics alias using-directives


【解决方案1】:

我真的不知道你想用这个实现什么,但是你可以用继承做类似的事情

public class CC : C<ID>
{
}

CC 类将派生自具有具体类型的 C&lt;T&gt;。因此CC.T 将是Int32 类型(或其他类型)。

【讨论】:

    【解决方案2】:

    不要使用别名。

    public class C<T> {
       T id;
    }
    

    ...

    void Foo() {
      var x = new C<Int32>();
    
      var y = new C<string>();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多