Как использовать тип псевдонима в качестве параметра универсального типа в C#

Как передать тип псевдонима, определенный using, в общий класс?

Я попробовал следующий код:

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

public class C<T> {
    T id;
}

и будет ошибка:

Ошибка CS0246 Не удалось найти тип или имя пространства имен «ID» (вам не хватает директивы использования или ссылки на сборку?)

Но директива using находится прямо над строкой, где возникает ошибка. Я что-то пропустил?


person Mr. Ree    schedule 28.07.2017    source источник
comment
Чего вы пытаетесь достичь?   -  person tymtam    schedule 28.07.2017
comment
На данный момент это не представляется возможным, см. первый комментарий здесь   -  person Paul Kertscher    schedule 28.07.2017
comment
Хотя связанный дубликат цитирует спецификацию, есть способ обойти это, объявить ID во внешнем пространстве имен и CC во внутреннем пространстве имен. Проблема здесь в том, что они находятся в одном пространстве имен.   -  person Lasse V. Karlsen    schedule 28.07.2017


Ответы (2)


Я действительно не знаю, чего вы пытаетесь достичь с помощью этого, но вы можете, однако, сделать что-то подобное с наследованием

public class CC : C<ID>
{
}

Класс CC будет производным от C<T> с конкретным типом. Следовательно, CC.T будет иметь тип Int32 (или любой другой).

person Paul Kertscher    schedule 28.07.2017

Не используйте псевдоним.

public class C<T> {
   T id;
}

...

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

  var y = new C<string>();
}
person tymtam    schedule 28.07.2017