要使用这样的初始化语法:
var contacts = new ContactList
{
{ "Dan", "[email protected] /cdn-cgi/l/email-protection" },
{ "Eric", "[email protected] /cdn-cgi/l/email-protection" }
};
...我的理解是我的ContactList
type 需要定义一个Add method http://philosopherdeveloper.wordpress.com/2011/01/04/yet-another-quick-primer-on-custom-initializers-in-c/这需要两个string
参数:
public void Add(string name, string email);
让我有点困惑的是{ }
初始化语法似乎最有用创建只读或固定大小集合时。毕竟它是为了模仿初始化语法array, 正确的? (好吧,所以数组不是只读的;但是它们are固定大小。)自然地,它只能在编译时已知集合内容(至少元素数量)的情况下使用。
因此,使用此集合初始值设定项语法的主要要求(具有Add
方法,因此是可变集合)与它最有用的典型情况不一致。
我确信我没有像 C# 设计团队那样对这个问题考虑得那么多;似乎这种语法可能有不同的规则,可以更好地适应其典型的使用场景。
我在这里离基地很远吗?是否渴望使用{ }
初始化固定大小集合的语法并不像我想象的那么常见?还有哪些其他因素可能影响了我根本没有想到的这种语法要求的制定?
我确信我没有像 C# 设计团队那样对这个问题考虑得那么多;似乎这种语法可能有不同的规则,可以更好地适应其典型的使用场景。
你的分析非常好;关键问题是上面陈述中的最后三个词。实际情况是什么典型使用场景?
由集合初始值设定项的典型使用场景激发的设计目标是初始化 of 现有集合类型可能在一个表达式语法这样集合初始值设定项就可以是嵌入查询理解中 or 转换为表达式树.
其他所有场景的优先级都较低;该功能之所以存在,是因为它有助于 LINQ 工作。
C# 3 编译器团队是该版本 Visual Studio / .NET 的“长杆”——我们的工作时间是所有团队中最长的,这意味着我们每延迟一天,产品就会延迟。我们希望为大家准时交付优质产品,而完美是优秀的敌人。是的,这个功能有点笨拙,并且并不能完成您可能想要的所有功能,但使其可靠并针对 LINQ 进行测试比使其适用于一堆基本上不可变的集合类型更重要甚至exist.
如果这个功能从一开始就被设计到语言中,虽然框架类型仍在不断发展,我确信事情会有所不同。正如我们在本网站其他地方讨论的那样,我非常希望有一个一次写入多次读取的固定大小值数组。最好定义一个通用模式来提供一堆状态来初始化任意不可变集合。你是对的,集合初始化语法对于这样的事情来说是理想的。
类似的功能在未来潜在的假设语言版本的列表中,但并不是真正的高位。换句话说,在我们过多考虑不可变集合初始化的语法糖之前,让我们首先正确理解 async/await。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)