什么时候使用var,什么时候使用强类型

本文关键字:什么时候 强类型 var | 更新日期: 2023-09-27 18:16:32

我有如下类

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"
                }
            };
        }
    }
}

在动作方法中,当实例化该类时,我有以下两个选项:

方法1

var d = new Models.Dropdown();

方法2

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

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

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

什么时候使用var,什么时候使用强类型

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,编译器会解析为#2。重要的是可读性。

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

除了可读性之外,没有什么不同。

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

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

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

请看看这个问题,以获得完整的信息。