何时使用var以及何时使用Strongly类型?

时间:2013-06-02 10:14:18

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我的课程如下。

public class Dropdown
{
    [Required(ErrorMessage = "Please select state")]
    public string StateId { get; set; }

    public List<SelectListItem> States
    {
        get
        {
            return new List<SelectListItem>() 
            { 
                new SelectListItem
                { 
                    Text = "State1", 
                    Value = "S1", 
                    Selected = false
                },
                new SelectListItem
                { 
                    Selected = false, 
                    Value = "S2", 
                    Text = "State2"
                }
            };
        }
    }
}

在Action Method中,我在实例化这个类时有两个选项。

方法1

var d = new Models.Dropdown();

方法2

Models.Dropdown d = new Models.Dropdown();

两者都显示相同数量的方法/属性/数据成员等。我还听说建议使用方法1

问题

我的假设是否正确使用方法1?

4 个答案:

答案 0 :(得分:4)

var关键字是允许隐式类型声明的编译器功能 - 我会选择使用var纯粹因为它更短。

人们可能会说你使用var失去了可读性,然而,是什么使

MyClass myobj = new MyClass()

更具可读性
var myobj = new MyClass()

我认为使用显式类型确实有意义的唯一情况是声明接口类型,即。

IMyInterface myobj = new MyClass()

或者施放

MyBaseClass myObj = new MyClass()

然后,您可以再次论证这些情况,因为相同的代码将是功能相同的

var myObj = (IMyInterface)new MyClass()
var myObj = (MyBaseClass)new MyClass()

通常,我很少看到需要显式定义类型,因为它是由实例化类型推断的。

答案 1 :(得分:3)

两者都是等价的,实际上如果你写#1,编译器会把它解析为#2。重要的是你的可读性。

为什么应该避免var只是因为它对可读性有负面影响,因此存在长期争论。我认为应尽可能避免这种情况,但在极端情况下,为表达式编写显式类型可能过于繁琐(只需编写一个复杂的linq表达式,使用灌浆或双重灌浆并尝试记下其类型)。

答案 2 :(得分:1)

除了可读性之外没有区别。

我选择方法1,因为我认为它更具可读性。

答案 3 :(得分:1)

对于var

推断出类型。因此,从类型的角度来看,这两种方法没有区别。

由于var更具可读性,Stylecop建议尽可能使用var

请查看at this question以获取完整信息。