繁体   English   中英

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

[英]Type alias on right side of using alias directive

我想做

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/zh-cn/library/aa664765%28v=vs.71%29.aspx 通常,使用别名指令对其他人不可见类型别名。 (泛型实际上不是问题,但是泛型的需求经常发生在泛型中,因为类型符号会变得很复杂。)

为什么会这样?

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

我想此限制只是为了排除必须担心编译器中类似以下情况的情况。

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

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

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

如果您发现自己经常使用别名指令,则表明您应该将常用的alias指令真正做成一个类。 我确定Tuple<TextBox, string, Func<bool>, string>描述性几乎不如小型四属性模型类那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM