关于这个有很多讨论,但我认为这完全取决于个人喜好,就像几乎在任何地方都使用“this”关键字一样。
我个人更喜欢显式类型的变量,但是当使用嵌套的泛型集合时,使用隐式类型的变量可以变得更具可读性。看着:
Dictionary<string, Dictionary<string, string>> myDictionary = new Dictionary<string, Dictionary<string, string>>();
与:
var myDictionary = new Dictionary<string, Dictionary<string, string>>();
编辑:这个 SO 主题涵盖了相同的主题,并有一些很好的回复:使用什么:var 或对象名称类型?
EDIT2:现在大量使用异步,我发现使用显式类型变量有时可以防止讨厌的错误。考虑这个愚蠢的示例,您希望返回用户的 Id。还要考虑GetUserAsync
返回 a Task<User>
。如果你使用隐式类型的变量,你最终会使用这样的东西:
public long GetUserId()
{
var user = GetUserAsync();
return user.Id;
}
这编译,但它是错误的。“用户”实际上是一个Task<User>
. 它编译为Task
也有一个Id
属性。在这种情况下,可能会意外返回任务的 ID 而不是用户。
public long GetUserId()
{
User user = GetUserAsync();
return user.Id;
}
以上内容无法编译,因为编译器会抱怨您无法将任务强制转换为用户。添加await
关键字当然可以解决这个问题。
我实际上曾经发生过这种情况:-)