什么时候应该在c#中使用var类型?

时间:2010-05-16 09:04:44

标签: c# types

  

可能重复:
  What’s the point of the var keyword?

什么是var类型,是否应该在c#中使用?什么时候应该使用?

您可以为方法的参数指定var类型吗?

7 个答案:

答案 0 :(得分:6)

var不是类型。这是一个方便的简写符号,可以为您节省大量的打字。以下两个声明是等效的:

Dictionary<string,List<int>> dic = new Dictionary<string,List<int>>();

var dic = new Dictionary<string,List<int>>();

如您所见,这样可以节省打字并且更易于阅读。如果您决定更改数据类型,则只需更改右侧部分。

但我最喜欢的地方是foreach循环:

foreach ( var item in someList )

此项自动采用正确的类型,具体取决于someList的类型,它使您可以更改someList的类型,而无需更改项的声明。

简而言之:var很棒,应该使用。

编辑:不,您不能将var指定为函数的参数。我猜你最接近的是泛型。我也完全忘了提及匿名类型。使用那些 来使用var。

答案 1 :(得分:4)

它是语言的一部分,所以是的,它应该被使用。但是,它不是类型,而是表示编译器确定的实际类型的占位符。

什么时候应该使用它?以前曾经多次询问过这个问题:

答案 2 :(得分:3)

var不是一个类型,它是编译器的指令,让它找出要使用的正确类型。

这意味着以下两行的输出完全没有区别:

var s = "Test";
string s = "Test";

至于何时使用它,你必须提出自己的规则。 var使用特定类型名称无法做的事情很少,但有一点是:匿名类型。

你可以这样做:

var x = new { A = 10 };

但是你无法想出一个强类型,因为它在编译时没有类型,而编译器会在编译期间创建类型,然后var将使用该类型。

这就是创建var以支持它,它也可以在没有匿名类型的情况下使用是一个额外的奖励,但你必须制定自己的规则,以便何时在这些情况下使用它。

我个人只在从源代码中轻松读取类型时才使用它,所以我会将它用于:

var dict = new Dictionary<int, string>();
var stream = new FileStream(...);

但不适用于:

var dict = GetDataStructure();
var stream = OpenFileForReading();

答案 3 :(得分:2)

我们倾向于在与所有本土图书馆互动时使用它。

这是因为我们经常在开发库时更改内容,并且经常更改类型名称或返回类型实际上不会破坏正在使用它的内容。

我们也倾向于在.NET框架中大部分时间使用它。

但是,我们已经完全禁止将它与int,string,bool等本机类型一起使用,因为在这些情况下变量的类型并不总是很清楚。

答案 4 :(得分:0)

好吧,如前所述,var是任何变量类型名称的简短表示法。至于我,我发现,var被许多开发人员过度使用,我认为var有时会使代码的可读性降低。但是你应该使用它的一个案例肯定是无穷大的类型变量。

答案 5 :(得分:0)

只是为了添加到其他评论中,我建议只在通过阅读代码推断出类型时使用var

var x = new Widget(); //ok
var y = Customer.Create(); // ok 

var z = DoSomething(); //not ok

答案 6 :(得分:0)

部分答案介绍Anonymous Types

MSDN上的var关键字。

知道var不是类型而是占位符,只能在方法或属性(局部变量定义)中使用。您不能在本地成员定义(类的私有成员)中使用它,在定义应该返回任何类型的方法时也不能使用它,如generics,您可以使用任何名称,{{1}除外}(或任何其他保留关键字),如:

var

因此,以下是使用var关键字的主要规则:

  1. 仅限本地变量;
  2. 将var与匿名类型一起使用(例如,Linq查询);
  3. 不要与泛型类型混淆;