C# C语言中字段的隐式类型#

C# C语言中字段的隐式类型#,c#,implicit-conversion,C#,Implicit Conversion,我喜欢用C#为局部变量隐式键入: var Beer = new Malt.Beer(); 而不是: Malt.Beer Beer = new Malt.Beer(); public Malt.Beer Beer = new Malt.Beer(); 我不认为这可以扩展到字段,可以吗 public var Beer = new Malt.Beer(); 而不是: Malt.Beer Beer = new Malt.Beer(); public Malt.Beer Beer = new M

我喜欢用C#为局部变量隐式键入:

var Beer = new Malt.Beer();
而不是:

Malt.Beer Beer = new Malt.Beer();
public Malt.Beer Beer = new Malt.Beer();
我不认为这可以扩展到字段,可以吗

public var Beer = new Malt.Beer();
而不是:

Malt.Beer Beer = new Malt.Beer();
public Malt.Beer Beer = new Malt.Beer();
它没有编译,但想知道我只是语法错误,或者隐式变量(var)不能在此范围内使用?

C#中的字段不能隐式键入,抱歉。我认为这与域的范围有关,而不是局部变量。

来自for C#:

备注以下限制适用于隐式类型变量声明:仅当局部变量为 在同一语句中声明和初始化;变量不能为空 初始化为null、方法组或匿名函数

  • 变量不能用于类作用域中的字段
  • 在初始化表达式中不能使用使用var声明的变量。换言之,此表达是合法的:
    inti=(i=20)但此表达式产生编译时错误:
    
    var i=(i=20)
  • 不能在同一语句中初始化多个隐式类型变量
  • 如果一个名为var的类型在作用域中,那么var关键字将解析为该类型名称,并且不会被隐式地视为 类型化局部变量声明

我认为这是不可能的
var
只在方法内部工作。按照我的想法,var是微软的一个大错误。想想看,当您使用Var时,编译器必须转换为正确的对象类型。如果你的显式回答没有。同样在大型程序中,当您尝试调试时,通常必须将鼠标悬停在变量上以了解它是什么,而不是直接查看对象类型。您还对类型为var的变量失去了智能感知。var只应与类型可能不同的泛型结合使用。@bilpor您刚才所说的大部分内容都是完全错误的。编译器不必“转换”任何内容-变量始终是强类型的<代码>整数i=10
var i=10完全相同,并产生完全相同的IL。您也不会丢失Intellisense,它仍然工作得很好。@bilpor我想您的意思是它应该只用于匿名类,而不是泛型。@Dave Zych必须是我的VS2013 Pro版本……无论何时使用var,我都不会对我设置的对象获取Intellisense。