如果使用"使用"使用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变为硬编码

但是,在某些情况下,你必须使用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,我有信心conncomm变量的任何使用都不需要修改。

注意,如果您需要具体的~Connection~Command类的独特功能,这可能并不总是合适的。

这是完全等价的,我不认为使用var,如果可以的话,会有什么不同。

但是有时候你必须使用var

相关文章: