在使用别名指令的右侧键入别名
本文关键字:别名 指令 | 更新日期: 2023-09-27 18:30:43
我想做
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> { }
当然,问题在于X
是C<Y>
C<C<X>>
是C<C<C<Y>>>
是......
如果语言限制更宽松,只允许使用 alias 指令进行循环,编译器可以切实可行地处理这个问题。我认为这只是一个优先级非常低的功能 - C# 语言团队只有这么多时间来设计和实现功能。
如果你发现自己经常使用 using alias 指令,这表明你常用的 using alias 指令应该真正成为一个类。 我敢肯定Tuple<TextBox, string, Func<bool>, string>
不像一个小型的四属性模型类那样具有描述性。