我的文章主题: Why no var on fields? 总结如下: 1.如果我们有"var"字段,那么字段的类型在表达式被分析之前是无法确定的,而这是在我们已经需要知道字段的类型之后发生的。 1.如果这些引用中有长链甚至循环,那该怎么办?所有这些算法都必须在这样一个世界中重新编写和测试,在这个世界中,顶级类型信息是从它们中确定的,而不是由它们消耗的。 1.如果你有"var"字段,那么初始化器可以是匿名类型的。假设字段是公共的。在CLR或CLS中还没有任何标准来说明公开匿名类型字段的正确方法。
3条答案
按热度按时间0s7z1bwu1#
我的文章主题:
Why no var on fields?
总结如下:
1.如果我们有"var"字段,那么字段的类型在表达式被分析之前是无法确定的,而这是在我们已经需要知道字段的类型之后发生的。
1.如果这些引用中有长链甚至循环,那该怎么办?所有这些算法都必须在这样一个世界中重新编写和测试,在这个世界中,顶级类型信息是从它们中确定的,而不是由它们消耗的。
1.如果你有"var"字段,那么初始化器可以是匿名类型的。假设字段是公共的。在CLR或CLS中还没有任何标准来说明公开匿名类型字段的正确方法。
y3bcpkx12#
从C# reference
也来自The C# Programming Reference
它只是不适合你所想的用法。
它的主要目的是允许在代码中支持匿名类型,并允许以简洁的方式指定局部变量。
r3i60tvu3#
简单的回答是因为说明书上说这是不合法的。-)
一般来说,这不是你想要做的。成员的类型应该是
IDictionary<string, string>
而不是Dictionary<string, string>
。这是一个很小的nit,但一般来说,最好在外部可见的对象中使用一个接口,这样你就可以在以后更改类型而不会影响代码的客户端。编译器只是给你一点提示,引导你朝着这个方向前进。