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

时间:2014-11-18 13:49:22

标签: c# using-directives

我想做

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。通常,使用别名指令的其他类型别名不可见。 (泛型实际上不是问题,但是对于泛型的需求频繁发生,因为类型表示可能变得复杂。)

为什么会这样?

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

1 个答案:

答案 0 :(得分:0)

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

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

当然问题是X C<Y> C<C<X>> C<C<C<Y>>>Tuple<TextBox, string, Func<bool>, string>是......

如果语言限制较宽松,仅使用别名指令禁止循环,编译器可以切实处理。我认为这只是一个优先级非常低的功能--C#语言团队只有很多时间来设计和实现功能。

如果您发现自己经常使用别名指令,那么它表明您的常用using别名指令应该真正成为一个类。我确信{{1}}几乎不像一个小的四属性模型类那样具有描述性。

相关问题