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