1

我有像下面这样的课。

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 中,我在实例化此类时有以下两个选项。

方法一

var d = new Models.Dropdown();

方法二

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

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

问题

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

4

4 回答 4

3

关键字是允许隐式类型声明的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()

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

于 2013-06-02T10:17:02.450 回答
3

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

关于为什么应该避免使用 var 只是因为它对可读性有负面影响存在长期争论。我的观点是尽可能避免它,但是在极端情况下,为表达式编写显式类型可能太麻烦了(只需编写一个带有分组或双分组的复杂 linq 表达式并尝试写下它的类型)。

于 2013-06-02T10:19:24.597 回答
0

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

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

请查看此问题以获取完整信息。

于 2013-06-02T10:18:47.083 回答
0

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

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

于 2013-06-02T10:16:34.117 回答