在使用别名指令的右侧键入别名



我想做

namespace n
{
    using TupT = Tuple<TextBox, string, Func<bool>, string>;
    // Doesn't compile
    // using DicT = Dictionary<Button, TupT>;
    // Have to repeat tuple definition: cumbersome and error prone
    using DicT = Dictionary<Button, Tuple<TextBox, Func<bool>, string>>;
    // ...
}

这是本语言规范第 9.3.1 条禁止的:http://msdn.microsoft.com/en-us/library/aa664765%28v=vs.71%29.aspx。通常,类型别名对其他使用 alias 指令不可见。(泛型实际上不是问题,但泛型经常需要别名,因为类型表示法可能会变得复杂。

为什么会这样?

编辑:是的,我知道:我可以通过多种方式以不同的方式做到这一点。但我特别想知道为什么我不能这样做;-)

我想这个限制只是为了排除在编译器中担心以下情况。

using X = C<Y>;
using Y = C<X>;
class C<T> { }

当然,问题在于XC<Y> C<C<X>>C<C<C<Y>>>是......

如果语言限制更宽松,只允许使用 alias 指令进行循环,编译器可以切实可行地处理这个问题。我认为这只是一个优先级非常低的功能 - C# 语言团队只有这么多时间来设计和实现功能。

如果你发现自己经常使用 using alias 指令,这表明你常用的 using alias 指令应该真正成为一个类。 我敢肯定Tuple<TextBox, string, Func<bool>, string>不像一个小型的四属性模型类那样具有描述性。

最新更新