什么时候使用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
会失去可读性,然而,是什么使
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
请看看这个问题,以获得完整的信息。