2013-11-26 26 views
2

我注意到越来越多,我们的开发人员使用优先关键字var实际铸造的类型,作为一个例子使用var关键字时数据类型是已知的

var check = context.ALLProducts.Any(); 

显然任何()只永远要返回一个布尔值,所以就我而言,它应该被设置为一个布尔值。我也看到了一些示例,其中var用于返回Int或字符串的函数,或者我认为不应该是var的任意数量的类型。

所以我的问题是 - 是否有任何真正的原因,我应该有一个问题与VAR用于一切,除了代码的可读性和可支持性?如果可能,我想强化我的观点,而不是说我不喜欢它。

+3

http://www.infoq.com/news/2008/05/CSharp-var – majjam

+0

谢谢,这很有趣。我意识到这是非常主观的,我只是希望有人会回来,没有使用VAR的一切具体原因。 – Andrew

+1

@Andrew var只是语法糖,所以不会有一个具体的原因(即不会有这样一种情况,即与显式类型变量相比,var'ed变量的行为不正确)。因此,这纯粹是一种风格的东西。 –

回答

1

自己张贴该代码是完全相同的使用bool

var check = context.ALLProducts.Any(); 

你根本就无法把一个非布尔到check如果你声明它这样。

作为一个例子,这个程序会给你一个编译器错误;

class Program 
{ 
    public static void Main() 
    { 
     var check = true; 
     check = 1; 
    } 
} 

恒值 '1' 不能被转换为 '布尔'


的优点是它需要较少的打字,特别是如果你类型是

System.Namespace.ReallyReallyLongTypeName thing = SomeFactory.GetObject(); 

,当然,缺点是你不能直接浏览代码并立即知道它是什么类型。

2

不确定这是否包含在链接中,但使用var关键字的正面情况适用于需要重构模型的情况。

获取一个实例,其中一个函数需要更改返回值类型,但新类型与上一个类型共享很多(如果不是全部)属性。如果你使用了var,那么你将会有很少的重构,如果有的话。

一个真实世界的例子可能是一个开发人员在存储库中返回dto,并且在绑定之前不会将其转换为视图模型。如果您将var用于模型并将其设置为已翻译的视图模型,那么您的动作可能很少/不会重构,以针对更改后的类型进行调整。