Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# var关键字的确切用法是什么?_C#_Var - Fatal编程技术网

C# var关键字的确切用法是什么?

C# var关键字的确切用法是什么?,c#,var,C#,Var,可能重复: 在与同事讨论了在C3中使用“var”关键字后,我想知道人们对通过var适当使用类型推断的看法是什么 例如,我在有问题的情况下相当懒散地使用var,例如:- foreach(var item in someList) { // ... } // Type of 'item' not clear. var something = someObject.SomeProperty; // Type of 'something' not clear. var something = some

可能重复:

在与同事讨论了在C3中使用“var”关键字后,我想知道人们对通过var适当使用类型推断的看法是什么

例如,我在有问题的情况下相当懒散地使用var,例如:-

foreach(var item in someList) { // ... } // Type of 'item' not clear.
var something = someObject.SomeProperty; // Type of 'something' not clear.
var something = someMethod(); // Type of 'something' not clear.
var更合法的用途如下:-

var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
很明显,它将是一个实现IEnumerable的类型,结果是什么,但是它并不像声明新对象的var那样明显

对于对象的LINQ,情况更糟,例如:-

var results = from item in someList
              where item != 3
              select item;
这并不比someList{/…}equivalent中的等效foreachvar项好多少


这里有一个真正关心类型安全的问题-例如,如果我们将该查询的结果放入一个接受IEnumerable和IEnumerable的重载方法中,调用方可能会无意中传入错误的类型。

在确定使用的数据类型之前,我只将其用作占位符


当然,这是一个简短的回答,但我认为当你应该使用var关键字时,这是非常接近的。

就我个人而言,我觉得你描述的情况远非可疑,因为除非您特别希望变量的静态类型不同于用于初始化变量的表达式的静态类型,否则重复您自己是没有意义的。例如:

IEnumerable<int> foo = new List<int>(); // It's IEnumerable on purpose
此外,var绝对不存在类型安全问题。重点不是变量可以是任何类型。它是一种非常特殊的类型,但您根本不想把它拼出来。

该关键字在该语言中用作速记,但不是.NET类型。编译器必须知道变量的类型才能使用var关键字,因此它是类型安全的

我个人只在类型名称也在赋值中使用并且名称可能太长而无法在代码中复制时才使用它

var dictionary = new Dictionary<string, string>();

此方法通常在的select子句中使用。

只是一种抽象或语法,可以在不指定类型的情况下编写代码。这不是第一种情况

在第二种情况下:相反,LINQ查询表示一些未知的、动态的、不具体的(如果愿意的话)类型

可以是:

var results = from item in someList
              where item != 3
              select item; //item a class instance
可能是

 var results = from item in someList
              where item != 3
              select item.ItemName; //string property of that class
 var results = from item in someList
          where item != 3
          select new {item.ItemName, item.ID}; //unknown type dynamically generated, that conains the string and integer, like result
可能是

 var results = from item in someList
              where item != 3
              select item.ItemName; //string property of that class
 var results = from item in someList
          where item != 3
          select new {item.ItemName, item.ID}; //unknown type dynamically generated, that conains the string and integer, like result
据我所知,var仍然是强类型的。编译器计算了正确的类型。事实上,它没有真正的意义

这只是减少操作次数的一个技巧。例如,当您更改一个类中的类型时,这可能会导致级联修改。但这只是将工作从程序员迁移到编译器的一种方式


例如,Linq查询将生成IEnumerable类型。当您更改某些类以使结果为IEnumerable时,无需更改代码的这一部分。

使用var时,您不必找出类型,这似乎是使用它的一个非常糟糕的理由。。。你应该知道类型是什么,var只是一种避免键入的快捷方式你是不是从@Henrik的重复评论中复制了这个问题?@Bali C:是的,如果你看看他之前的问题,你会注意到一个相当令人不安的模式…@BoltClock,如果用户正在做一些奇怪的事情,比如复制其他问题等等,是否有标记用户而不是评论的方式。。?只是curious@Burkely91字体只要在他们的帖子上打个旗子就行了。我想你在这里一针见血了+1.
var dictionary = new Dictionary<string, string>();