var 与具体类型的用法[重复]

Posted

技术标签:

【中文标题】var 与具体类型的用法[重复]【英文标题】:var versus concrete type usage [duplicate] 【发布时间】:2013-12-21 21:57:57 【问题描述】:

我已经在 *** 中查看了 5 篇或更多关于 var 使用的帖子,但我仍在寻找关于 var 使用的答案。我习惯使用 Concrete 类型而不是 var,但我的 Resharper 抱怨要更改为 var。 var 是一种类型的选择 - 即使具体类型已知?

【问题讨论】:

您可以将 ReSharper 配置为仅对此提出建议。但是,顺便说一句,ReSharper 永远是对的。 在节省硬盘空间和击键方面var比较好。但我不知道 var 为编译器节省了多少时间。 【参考方案1】:

以下是msdn的摘录...

当变量的特定类型在键盘上输入起来很乏味,或者很明显,或者不增加代码的可读性时,var 关键字也很有用。 var 以这种方式有帮助的一个示例是嵌套泛型类型,例如与组操作一起使用的泛型类型。在以下查询中,查询变量的类型为 IEnumerable>。只要你和其他必须维护你的代码的人理解这一点,为了方便和简洁使用隐式类型是没有问题的。

然而,使用 var 至少有可能使其他开发人员更难以理解您的代码。因此,C# 文档通常仅在需要时才使用 var。

参考:http://msdn.microsoft.com/en-us/library/bb384061.aspx

祝你好运!

【讨论】:

【参考方案2】:

当类型很明显时我更喜欢使用var以提高可读性:

var myVariable = new List<string>();
var myVariable2 = (int) someOtherVariable;

如果类型不明显,我会明确指定。例如方法的返回值:

int myVariable3 = GetSomeValue();

【讨论】:

【参考方案3】:

来自

var (C# Reference)

从 Visual C# 3.0 开始,在方法范围内声明的变量可以具有隐式类型 var。隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定类型。以下两个 i 的声明在功能上是等价的:

var i = 10; // implicitly typed
int i = 10; //explicitly typed

我认为对你来说重要的部分是

一个隐式类型的局部变量是强类型的,就像你 自己声明了类型,但是编译器决定了类型。

更进一步,来自Implicitly Typed Local Variables (C# Programming Guide)

可以给局部变量一个推断的“类型” var 而不是 显式类型。 var 关键字指示编译器推断 右侧表达式中的变量类型 初始化语句。推断的类型可能是内置类型, 匿名类型、用户定义的类型或在 .NET 中定义的类型 框架类库。 重要的是要理解 var 关键字并不意味着“变体”,也不表示该变量是松散类型的,或者 迟到。它只是意味着编译器确定并分配 最合适的类型。

【讨论】:

以上是关于var 与具体类型的用法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linq ToDictionary 匿名与具体类型 [重复]

var的用法

Var与Dynamic的区别

使用 var 运算符而不是类类型 [重复]

MySQL数据类型转换函数CAST与CONVERT的用法

MySQL CAST与CONVERT 函数的用法