之前我问了一个问题,为什么我看到这么多的例子都使用了这个var关键字并得到了答案,虽然它只是匿名类型所必需的,但它仍然被用来使编写代码"更快"/更容易和"只是因为".
在这个链接("C#3.0 - Var不是Objec")之后,我看到它var被编译成IL中的正确类型(你会在中间的文章中看到它).
我的问题是IL代码使用var关键字take 会有多少(如果有的话),如果在任何地方使用它,它是否会接近于对代码性能有可衡量的水平?
我们的编码标准要求我们尽量减少C#var的使用(建议限制它与Linq一起使用).然而,有时候使用泛型的地方比较方便,例如
Dictionary<DateTime, Dictionary<string, float>> allValues = ...
// ...
foreach (var dateEntry in allValue)
Run Code Online (Sandbox Code Playgroud)
更容易打字
foreach (KeyValue<DateTime, Dictionary<string, float>> dateEntry in allValue)
Run Code Online (Sandbox Code Playgroud)
(并且比在某些情况下记住显式类型更容易).
任何重构工具都能够将前者转换为后者.我已经看过Resharper,但它似乎并没有(事实上,它的默认建议是向相反的方向发展).
我的团队刚收到承包商编写的代码,承包商倾向于使用类型推断var.我们的团队更喜欢使用实际类型进行显式输入(如下所示):
Type someName = new Type();
IList<TypeTwo> someOther = someClass.getStuff();
Run Code Online (Sandbox Code Playgroud)
而承包商交付
var someOther = someClass.getStuff();
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2008知道推断类型是什么,正如我可以通过悬停var关键字看到的那样
我的问题是,有没有办法进行全局查找并将var替换为推断类型?
我喜欢使用隐式打字几乎所有东西,因为它干净简单.但是,当我需要在单个语句周围包装try ... catch块时,我必须打破隐式类型以确保变量具有已定义的值.这是一个人为的假设例子:
var s = "abc";
// I want to avoid explicit typing here
IQueryable<ABC> result = null;
try {
result = GetData();
} catch (Exception ex) { }
if (result != null)
return result.Single().MyProperty;
else
return 0;
Run Code Online (Sandbox Code Playgroud)
有没有办法可以调用GetData()异常处理,但不必显式定义结果变量的类型?有点像GetData().NullOnException()?