Подтвердить что ты не робот

Использование 'using alias = class' с общими типами?

Поэтому иногда я хочу включить только один класс из пространства имен, а не в полное пространство имен, например, здесь я создаю псевдоним этого класса с помощью инструкции using:

using System;
using System.Text;
using Array = System.Collections.ArrayList;

Я часто делаю это с помощью дженериков, поэтому мне не нужно повторять аргументы:

using LookupDictionary = System.Collections.Generic.Dictionary<string, int>;

Теперь я хочу сделать то же самое с общим типом, сохраняя его как общий тип:

using List<T> = System.Collections.Generic.List<T>;

Но это не компилируется, так есть ли способ добиться создания этого псевдонима, оставив этот тип как общий?

4b9b3361

Ответ 1

Нет, нет. Алиас типа в С# должен быть закрытым (иначе полностью разрешенным) типом, поэтому открытые генерики не поддерживаются

Это описано в разделе 9.4.1 спецификации языка С#.

Использование псевдонимов может называть закрытый сконфигурированный тип, но не может называть объявление несвязанного общего типа без предоставления аргументов типа.

namespace N2
{
    using W = N1.A;         // Error, cannot name unbound generic type
    using X = N1.A.B;           // Error, cannot name unbound generic type
    using Y = N1.A<int>;        // Ok, can name closed constructed type
    using Z<T> = N1.A<T>;   // Error, using alias cannot have type parameters
}

Ответ 2

как показано на http://msdn.microsoft.com/en-us/library/sf0df423.aspx и http://msdn.microsoft.com/en-us/library/c3ay4x3d%28VS.80%29.aspx, вы можете сделать

using gen = System.Collections.Generic;
using GenList = System.Collections.Generic.List<int>;

а затем используйте

gen::List<int> x = new gen::List<int>;

или

GenList x = new GenList();

однако вам нужно реплицировать те, которые используют определения, в каждом файле, в котором вы их используете, поэтому, если вы в будущем внесете некоторые изменения в них и забудете обновить в каждом файле, все будет плохо работать.

Я надеюсь, что С# в будущем будет обрабатывать псевдонимы, подобные методам расширения, и позволять вам определять многие из них в файле, который вы используете в другом месте, а затем поддерживать их в одном месте и скрывать внутренние ненужные данные сопоставления типов от типа потребителей.