我想做
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。通常,使用别名指令的其他类型别名不可见。 (泛型实际上不是问题,但是对于泛型的需求频繁发生,因为类型表示可能变得复杂。)
为什么会这样?
编辑:是的,我知道:我可以通过各种方式做到不同。但我特别想知道为什么我不能这样做; - )
答案 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}}几乎不像一个小的四属性模型类那样具有描述性。