日期:2014-05-18  浏览次数:20955 次

关于var的讨论。
网上说的有这几点好处:

1. 它有利于更好地为本地变量命名。

2. 它有利于设计更好的API。

3. 它促使对变量进行初始化。

4. 它消除了代码的混乱。

5. 它不需要using指示符。

网上对这几点好处观点不一致,有的认为是荒谬的。

请问各位在编程的时候有没有经常用到var这个没?通常在什么时候用到的?最后一个好处说不需要using指示符是什么意思?

------解决方案--------------------
反正我在java的时候么有var很不习惯~
var无可替代的地方是匿名类型
至于什么变量初始化 更好的本地变量命名 更好的API 那都是扯淡 一点关系都没有 var什么时候可以声明本地变量了 他就只能在方法内声明局部变量
------解决方案--------------------
C#的var不同于Javascript的var。

它的出现的一个最强烈的动机是配合C# 3.0出现的匿名类。所谓匿名类,其实是C#编译器命名的类,而程序员则不管它的名字。因为它根本没有名字,所以如果没有var,那么就用不起来了。

var实现了编译器对变量名的自动推定,看这样一个类型:
IEnumerable<Dictionary<string, Func<int, int, bool>>>,写起来是多么繁琐。
有了var,就可以让代码更清洁了。
------解决方案--------------------
例如我在编写代码时,因为有很多被使用的方法我懒得查资料,因此很多时候我都不知道赋值语句右边计算结果的具体类型该怎样写,我都是先声明了变量,然后在下一行去看看vs提示给我这个变量的类型是什么,我才知道接下来该怎么写代码。

我经常“钦佩”有人会写出
C# code
IList<xxx> lst= Getdatas(..);

------解决方案--------------------
探讨
C#的var不同于Javascript的var。

它的出现的一个最强烈的动机是配合C# 3.0出现的匿名类。所谓匿名类,其实是C#编译器命名的类,而程序员则不管它的名字。因为它根本没有名字,所以如果没有var,那么就用不起来了。


------解决方案--------------------
探讨

引用:
C#的var不同于Javascript的var。

它的出现的一个最强烈的动机是配合C# 3.0出现的匿名类。所谓匿名类,其实是C#编译器命名的类,而程序员则不管它的名字。因为它根本没有名字,所以如果没有var,那么就用不起来了。


只有这一个理由可以使用var,

我不会在明明知道类型的时候,随意让编译器去"推定"类型,
因为有可能不是你期待的结果……

------解决方案--------------------
探讨

------解决方案--------------------
探讨

例如:
var Id = 1; //编译器在这里会觉得,定义为int值是最合适的
long Id = 1; //而我的编程习惯是,整数变量优先使用long值

C# code
//以下内容摘自msdn
//此表达式是合法的 :
int i = (i = 20);
//但此表达式会产生编译时错误:
var i = (i = 20); //到底是先有鸡还是先有蛋?无法确定

更多细节……

------解决方案--------------------
探讨

个人觉得,在有些类型不确定的情况下可以用,如果是团队合作的话,能不用则不用,毕竟对于其他人看代码有弊

------解决方案--------------------
探讨

引用:

引用:

个人觉得,在有些类型不确定的情况下可以用,如果是团队合作的话,能不用则不用,毕竟对于其他人看代码有弊

在类型不确定的情况下var是没法使用的,var是设计时概念,编译器帮你推断类型,如果类型不确定编译器会报错的。


请问能否举个列子?什么情况下类型无法确定,这时候会无法推断?

------解决方案--------------------
int i = 5;
??? m = i > 0 ? 0D : 2L; //这时M的类型在设计时是没法推断出的。所以没有办法处理。

可以用dynamic 但是除非必要,本人不推荐用这个,编译时检查是高级语言一个很好的优点,这个还是尽量保持的好。
dynamic m = i > 0 ? 0D : 2L;