3

以下是等价的吗?在某些情况下
使用类型很重要吗?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)) {
        ...
    }
}
4

7 回答 7

5

对于编译器来说是一样的。严重地。var变成硬编码。

但是,在某些情况下您必须使用 var,因为您不知道类型。

IQueryable(LINQ) 允许您投影:

......

.Select (x=> new { Name = x.Name; }).ToArray();

在这种情况下,你会得到一个 - 匿名类型的数组,所以......

它一定要是

var 结果数组

因为此时您不能命名类型。

var只是编译器的事情。Resharper 的代码约定说:使用 var,而不是类型。这些天我倾向于同意。

编译后也是一样。

于 2013-01-06T23:17:10.310 回答
2

如果您明确定义变量将包含的对象类型,在这种情况下,通过在类名上使用 new 关键字,那么您可以var简单地用作快捷方式,而不必键入两次类名。没有任何技术差异。

使用var更容易输入和阅读,例如:

Dictionary<int, MyLongNamedObject> dictionary = new Dictionary<int, MyLongNamedObject>();

或者

var dictionary = new Dictionary<int, MyLongNamedObject>();
于 2013-01-06T23:18:57.190 回答
1

这些是等价的。

var始终与实际使用表达式的编译时类型等效(尽管更短)。

但是,当使用匿名类型时,您需要使用var,因为没有您可以自己编写的特定命名类型。

于 2013-01-06T23:17:42.977 回答
1

var关键字本身不是“类型” 。var要求编译器自动为您推断类型。没有区别..

关键字的使用var归结为个人或团队偏好。尝试保持一致,并尝试仅在人脑一眼就能推断出类型的地方使用它。

例如:

// bad
var customers = GetCustomers();

// good
var customers = GetListOfCustomers();

鉴于智能感知可以挽救生命,以上内容可能是个人偏好。但它在审查代码时会有所帮助。

它对于缩短嵌套泛型类型的声明也很有用(例如,值也是包含字符串列表的字典的字典)。

于 2013-01-06T23:22:14.300 回答
1

这些代码是完全等价的。

var当您不知道不需要了解类型案例时,它会更有用。

假设我们有Car阶级和Cleaners财产。当我们编写这样的代码时;

Car c = new Car();
var cleaner = c.Cleaners;

我们不需要知道cleanerisIEnumerable<Cleaner>或什么的类型BindingList<Cleaner>。如果我们使用IEnumerable<Cleaner>orBindingList<Cleaner>在这种情况下,这可能是一个问题。因为返回类型可能是这些类型之一。在这种情况下使用var,我们不在乎cleaner.

于 2013-01-06T23:31:03.370 回答
1

我尝试指定一个反映代码实际需要的类或接口。这让我相信未来的更改不会破坏其他代码。

我会使用:

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

如果我以后决定从 a 更改为 a SqlConnectionOracleConnection我相信任何使用connorcomm变量都不需要修改。

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

于 2013-01-07T03:24:42.483 回答
0

它是完全等价的,我不认为使用 var,如果可以的话,会有所作为。

但是,您有时必须使用 var。

于 2013-01-06T23:18:31.070 回答