如果使用"使用"使用var类型很重要吗?
本文关键字:quot 使用 类型 如果 var | 更新日期: 2023-09-27 17:50:48
以下内容是否相等?
在某些情况下使用var
类型是否重要?
当前正在使用:
static int ReturnIDfromDb(string sqlString, string outputParam) {
var connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
using(var conn = new SqlConnection(connectionString))
using(var comm = new SqlCommand(sqlString, conn)) {
...
}
}
这不是更具体吗?
static int ReturnIDfromDb(string sqlString, string outputParam) {
var connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
using(SqlConnection conn = new SqlConnection(connectionString))
using(SqlCommand comm = new SqlCommand(sqlString, conn)) {
...
}
}
对于编译器也是一样的。认真对待。var
变为硬编码
但是,在某些情况下,你必须使用var,因为你不知道类型。
IQueryable
(LINQ)允许您投影:
…
.Select (x=> new { Name = x.Name; }).ToArray();
在这种情况下,你得到一个匿名类型的数组,所以…
必须是
var resultarray
因为你现在还不能命名类型
但var
是编译器唯一的东西。Resharper的代码约定是:使用var,而不是type。这些天我倾向于同意。
编译后也是一样
如果您显式定义变量将要包含的对象类型,在本例中通过在类名上使用new关键字,那么您可以简单地使用var
作为快捷方式,而不必两次键入类名。没有技术上的差别。
使用var
更容易输入和阅读,例如:
Dictionary<int, MyLongNamedObject> dictionary = new Dictionary<int, MyLongNamedObject>();
或
var dictionary = new Dictionary<int, MyLongNamedObject>();
这两个是等价的。
var
总是与实际使用表达式的编译时类型相等(尽管更短)。
但是,当使用匿名类型时,您需要使用var
,因为没有您可以自己编写的特定命名类型。
var
关键字本身并不是一个" type "。var
要求编译器自动为您推断类型。没有差别……
var
关键字的使用取决于个人或团队的偏好。尽量保持一致,并且尽量只在人类大脑一眼就能推断出类型的地方使用它。
例句:
// bad
var customers = GetCustomers();
// good
var customers = GetListOfCustomers();
以上可能是个人偏好,也考虑到智能可以拯救生命。但是它在检查代码时很有帮助。
对于缩短嵌套泛型类型的声明也很有用(例如,值也是包含字符串列表的字典的字典)。
这两个代码是完全等价的。
当不知道或者不需要知道类型大小写时, var
更有用。
假设我们有Car
类和Cleaners
属性。当我们写这样的代码时;
Car c = new Car();
var cleaner = c.Cleaners;
我们不需要知道cleaner
的类型是IEnumerable<Cleaner>
还是BindingList<Cleaner>
或其他什么。如果我们在本例中使用IEnumerable<Cleaner>
或BindingList<Cleaner>
,这可能会出现问题。因为返回类型可以是这些类型之一。在这种情况下使用var
,我们不关心cleaner
的类型。
我尝试指定一个反映代码实际需要的类或接口。这给了我信心,以后的修改不会破坏其他代码。
我使用:
static int ReturnIDfromDb(string sqlString, string outputParam) {
string connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
using(DbConnection conn = new SqlConnection(connectionString))
using(DbCommand comm = conn.CreateCommand()) {
comm.CommandText = sqlString;
...
}
}
如果我后来决定从SqlConnection
更改为OracleConnection
,我有信心conn
或comm
变量的任何使用都不需要修改。
注意,如果您需要具体的~Connection
或~Command
类的独特功能,这可能并不总是合适的。
这是完全等价的,我不认为使用var,如果可以的话,会有什么不同。
但是有时候你必须使用var