2009-07-27 50 views
6

唯一的好处,我可以看到的事:什么是隐式类型的优势的C#3.0> +

var s = new ClassA(); 

ClassA s = new ClassA(); 

是,以后如果你决定要ClassB的,你只需要更改声明的RHS。

我想如果你通过一个集合枚举,你也可以只是'var',然后找出类型。

是吗?我的软弱的头脑没有看到其他的巨大好处吗?

+0

当我说“我想,如果你是通过收集,你也可以只为‘无功’,然后找出类型后枚举。”我知道它已经在运行时输入了......我的意思是在你的逻辑中。 – Matt 2009-07-27 23:11:44

+0

[在C#中使用var关键字]可能的重复(http://stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp) – nawfal 2014-07-15 14:04:58

回答

8

它主要是合成糖。这真的是你的偏好。除非使用匿名类型,否则使用var是必需的。尽管如此,我更喜欢隐式打字,但它真的与LINQ一起闪耀。

我发现它是多余的键入一个类型两次。

List<string> Foo = new List<string>(); 

当我可以很容易地输入var时,它很明显是什么类型。

var Foo = new List<string>(); 
4

我开始什么原来是一个非常有争议的线程,当我第一次签署了这里(我的选择。“邪恶”来形容一般使用VAR显然是一个糟糕的选择。)不用说,我有对于VAR更欣赏比我之前,我开始线程,以及更好地了解它如何能够有效地用于:

The evilness of 'var' in C#?

一些很好的理由使用VAR:

  • 简洁
  • 重复(DRY)
  • 减少重构工作的减少
  • 支持匿名类型(它被添加到C#的关键原因)
0

首要原因隐式类型是支持匿名类型,如那些由LINQ查询产生的。在处理复杂类型的泛型时它们也可以是一个很大的好处,比如Dictionary<int,List<string>>。这不是太复杂,但想象一下......

foreach KeyValuePair<int,List<string>> pair in myDictionary 
{ 

} 

被隐式键入简化。

2

它允许我不必重复自己。考虑这个:

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

我们有一个非常长的typename在同一行上重复两次,绝对没有任何好处。而且,如果你需要重构这个,你需要两次更新类型。而这仅仅是因为表现:

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

目前仍然没有关于类型的dict此疑问,但代码更短,我会声称,它更易于阅读为好。

5

var对匿名类型非常有用,它们没有名称供您使用。

var point = new {X = 10, Y = 10}; 

这将创建一个具有属性X和Y的匿名类型。它主要用于支持LINQ。假设你有:

class Person 
{ 
    public String Name {get; set;} 
    public Int32 Age {get; set;} 
    public String Address {get; set;} 
    // Many other fields 
} 

List<Person> people; // Some list of people 

现在假设我想选择只有等到年龄的姓名和多年的人谁是18岁以下的18:

var minors = from person in people where person.Age < 18 select new {Name = person.Name, YearsLeft = 18 - person.Age}; 

现在minors包含一些一个List匿名类型。我们可以迭代这些人:

foreach (var minor in minors) 
{ 
    Console.WriteLine("{0} is {1} years away from age 18!", minor.Name, minor.YearsLeft); 
} 

这些都不是可能的;我们需要选择整个Person对象,然后在我们的循环中计算YearsLeft,这不是我们想要的。

0

虽然var关键字主要是推出了支持匿名类型,我已经看到了更广泛的使用它的主要论点是为了简洁/更可读的代码,再加上你的代码行更贴:

Dictionary<string, double> data = new Dictionary<string, double>(); 
versus 
var data = new Dictionary<string, double>(); 

虽然对大多数人来说,我也很喜欢var关键字作为一个盲人程序员,因为我听的代码被只有一个syllabul :-)

1

其实读出后没有一个很好的理由,因此这里的变量名“ var“在C#中用于处理匿名类型。

像:

var t = new {number = 10, name = "test"};