Вложенные псевдонимы в C#

Я видел много ответов на typedef проблема в C#, который я использовал, таким образом, я имею:

using Foo = System.Collections.Generic.Queue<Bar>;

и это работает хорошо. Я могу измениться, определение (особенно изменяют Панель => Зоопарк и т.д.), и все, что использует изменения Foo. Большой.

Теперь я хочу, чтобы это работало:

using Foo = System.Collections.Generic.Queue<Bar>;
using FooMap = System.Collections.Generic.Dictionary<char, Foo>;

но C#, кажется, не нравится Foo во второй строке, даже при том, что я определил его в первом.

Существует ли способ использовать существующий псевдоним в качестве части другого?

Править: Я использую VS2008

10
задан quamrana 2 March 2010 в 12:16
поделиться

1 ответ

Согласно стандарту, похоже, ответ отрицательный. Из Раздел 16.3.1 , параграф 6:

1 Порядок, в котором записываются using-alias-directives, не имеет значения, и разрешение {{ 1}} namespace-or-type-name, на которое ссылается директива using alias, не зависит от самой директивы using alias или других директив using в , непосредственно содержащем модуль компиляции или тело пространства имен.

2 Другими словами, имя-пространства-имен или-типа директивы-псевдонима разрешается как , если непосредственно содержащий единица компиляции или тело пространства имен не имели директив использования.

Редактировать:

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

В зависимости от ваших потребностей в области видимости и силы набора текста вам может сойти с рук что-то вроде:

class Foo : System.Collections.Generic.Queue<Bar>
{
}
15
ответ дан 3 December 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: