C# 如果使用;使用;使用var类型重要吗

C# 如果使用;使用;使用var类型重要吗,c#,C#,以下是否等效? 在某些情况下使用var类型是否重要 目前正在使用此: static int ReturnIDfromDb(string sqlString, string outputParam) { var connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString; using(var conn = new SqlConnection(connectionString))

以下是否等效?
在某些情况下使用
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,因为您不知道类型

IQueryable
(LINQ)允许您投影:

在本例中,您将获得一个匿名类型的数组,因此

一定是这样

结果变量

因为此时无法命名类型

但是
var
是唯一的编译器。Resharper的代码约定是:使用var,而不是type。我现在倾向于同意

编译器之后是相同的。

这些是等效的

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


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

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


但是,有时确实需要使用var。

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

使用
var
更易于键入和阅读,例如:

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

var dictionary=newdictionary();

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

var
关键字的使用取决于个人或团队偏好。试着保持一致,试着只在人类大脑一眼就能推断出类型的地方使用它

例如:

鉴于intellisense可以拯救生命,上述可能是个人偏好。。但它在检查代码时会有所帮助

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

这些代码完全等效。
var
您不知道不需要知道类型案例时更有用

假设我们有
汽车
类和
清洁工
物业。当我们写这样的代码时

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

我们不需要知道
cleaner
的类型是
IEnumerable
BindingList
或其他类型。如果在这种情况下使用
IEnumerable
BindingList
,这可能是一个问题。因为返回类型可能是这些类型之一。在这种情况下,使用
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
变量的任何使用都不需要修改


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

+1因此在某些情况下,我需要使用
var
,但在本文中,我可以在迭代时使用其中一个。。也许是这样。。但是,如果您需要使用特定的内容(例如,
List
ForEach
方法),那么您需要显式地将其键入。这使得查看代码更容易。此外,一个非复数版本的对象集合让我的眼睛流血@SimonWhitehead当然,如果您返回的类型是特定类型,那么在某些情况下,使用
var
可能会导致一些内存/类型问题。现在您知道它们是相同的,您将使用哪一种?我工作过的大多数开发人员更喜欢使用
var
作为其较少的类型。其他人更喜欢完全限定,尤其是在声明数字时,以便了解边界/限制。
// bad
var customers = GetCustomers();

// good
var customers = GetListOfCustomers();
Car c = new Car();
var cleaner = c.Cleaners;
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;
        ...
    }
}