如果使用“使用”,则使用var类型很重要

时间:2013-01-06 23:14:46

标签: c#

以下是否相同?
在某些情况下使用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)) {
        ...
    }
}

7 个答案:

答案 0 :(得分:5)

对于编译器,它是相同的。认真。 var变成了硬编码。

但是,你仍然需要使用var,因为你不知道这种类型。

IQueryable(LINQ)允许您投影:

.....

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

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

必须是

var resultarray

因为此时无法命名类型。

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

编译后它是一样的。

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

这些是等价的。

var总是等效(尽管更短),而不是实际使用表达式的编译时类型。

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

答案 3 :(得分:1)

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

使用var关键字取决于个人或团队偏好。尽量保持一致,并尝试只使用它,一目了然,人类的大脑可以推断出这种类型。

E.g:

// bad
var customers = GetCustomers();

// good
var customers = GetListOfCustomers();

以上可能是个人偏好,因为智能感知可以节省生命...但在审查代码时它会有所帮助。

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

答案 4 :(得分:1)

这些代码完全相同。

您不知道不需要了解类型案例时,

var会更有用。

假设我们有Car类和Cleaners属性。当我们编写这样的代码时;

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

我们不需要知道 cleaner的类型是IEnumerable<Cleaner>BindingList<Cleaner>或其他什么。如果我们在这种情况下使用IEnumerable<Cleaner>BindingList<Cleaner>,则可能会出现问题。因为返回类型可能是这些类型之一。在这种情况下使用var,我们不关心cleaner的类型。

答案 5 :(得分: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;
        ...
    }
}

如果我后来决定从SqlConnection更改为OracleConnection,我相信任何对conncomm变量的使用都不需要修改。< / p>

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

答案 6 :(得分:0)

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

但是你有时必须使用var。