以下是否相同?
在某些情况下使用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)) {
...
}
}
答案 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
,我相信任何对conn
或comm
变量的使用都不需要修改。< / p>
请注意,如果您需要具体~Connection
或~Command
类的独特功能,这可能并不总是合适。
答案 6 :(得分:0)
它是完全等效的,我不认为使用var,如果可以的话,会有所作为。
但是你有时必须使用var。