为什么我们不能在类级别声明var a = new List?
时间:2020-03-06 14:59:40 来源:igfitidea点击:
我知道我们不能在类级别执行此操作,但是在方法级别我们可以始终执行此操作。
var myList=new List<string> // or something else like this
无论我们在哪里声明这样的变量,这个问题都浮现在我的脑海。我们总是在表达式的RHS处提供类型信息。因此,编译器不需要进行类型猜测。 (纠正我,如果我错了)。
所以问题仍然不在类级别,而在方法级别允许
解决方案
编译人员只是没有实现支持。
这完全是编译器的魔力,并且编译器实际上没有在IL中添加"在运行时弄清楚类型"的内容,它知道类型并将其内置,因此它也可以为成员完成。
只是没有。
我非常确定,如果我们问Ccompiler团队的实际编译人员,我们会得到一些正式的信息,但是这里并没有发生任何魔术,并且应该可以对成员字段进行相同的操作。
关键字var是专门为支持匿名类型而发明的。通常,我们不会在类级别上声明匿名类型,因此未实现。
示例语句
var myList=new List<string>
这不是如何使用var
关键字的一个很好的例子,因为它不是用于预期目的的。
它不像在方法中实现var那样简单,因为我们还必须考虑到不同的修饰符和属性,如下所示:
[MyAttribute()] protected internal readonly var list = new List<T>();
我真正想要的是类型推断的const!
public const notFoundStatus = 404; // int
实施此功能存在技术问题。常见情况看似简单,但较困难的情况(例如,在链或者循环中引用其他字段的字段,包含匿名类型的表达式)并非如此。
有关详细说明,请参见Eric Lippert的博客:为什么字段上没有变量?