【问题标题】:What is the purpose of 'var'? [duplicate]'var'的目的是什么? [复制]
【发布时间】:2011-06-28 13:56:26
【问题描述】:

可能重复:
What's the point of the var keyword?

询问它是如何工作的。我询问它是否会影响性能。我已经知道这些答案了。

我想知道最初是什么激发了 MS C# 团队将其添加到语言中。你不会在语言中添加琐碎的东西。它解决了一定有一个值得注意的问题。那是什么问题?

我见过的最接近“它解决的问题”的例子是使用匿名类型时,如下所示:

var linqResult = from element in SomeCollection s
                 elect new { element.A, element.B } 

这种用法具有讽刺意味的是,样式和编码标准指南(例如 Microsoft 提供的)建议编码人员在结果类型不明显时避免使用“var”。换句话说,“var”的(大概)预期用途与编码标准指南相冲突。

如果我正在编写编码标准,并试图防止过度使用 'var',我会有点倾向于说“仅在响应匿名类型时使用 'var'”。但这带来了一个完整的问题:在语言中添加“var”的目的是什么?

【问题讨论】:

  • 您确实回答了您的问题。引入var 是为了支持匿名类型,因为没有其他方法可以拥有匿名类型的变量。
  • 你已经有了答案:最初的目的是处理匿名类型。
  • @David - Bingo,我在找那个。
  • @David - 或者可能是 infer,因为一些疯狂的程序员使用 var 不仅仅是匿名类型。

标签: c# linq coding-style var


【解决方案1】:

匿名类型是最重要的,但也减少了方法中的重复:

Dictionary<MyCustomType, List<MyOtherCustomType>> dict = new Dictionary<MyCustomType, List<MyOtherCustomType>>();

【讨论】:

  • 是的。当很明显变量是什么类型时就是这种情况。因此它可以在这种情况下使用(即使我没有)。
  • @Robert 这是一个风格决定和一个选项。对于重复,我总是使用它(type x = new type()),但 Method Calls 是根据具体情况决定的。
【解决方案2】:

完全正确!匿名类型。如果没有 var 并且仍然有智能感知,你将如何保留对创建的匿名类型的引用?

换句话说:当没有var 时,就不会有任何匿名类型在我们现在具有编译时支持的可用意义上。匿名类型会出现太多运行时错误。

添加的 sugar(过度使用时会很复杂)是您可以将 var 与非匿名变量一起使用。当然可以,但这是一个坏习惯。

【讨论】:

  • 你会使用一个对象,但缺点是你不会有智能感知。
  • @Yuriy:你不仅没有智能感知,而且没有属性——OP 示例中的匿名类型有两个属性:.A 和 .B。你不能访问 System.Object.A 因为 Object 没有这个属性,所以你需要转换它。把它扔给什么?在 .net 4 中,dynamic 可以解决这个问题,但 .net 3 没有。
  • @Michael:我当然可以,通过反思。我真的不想。
【解决方案3】:

据我所知,var 关键字是为了让 LINQ 更容易使用匿名类型

【讨论】:

  • var 对启用 LINQ 没有任何作用。
【解决方案4】:

来自MSDN

在许多情况下,使用 var 是 可选的,只是一个句法 方便。然而,当一个变量 用匿名类型初始化 您必须将变量声明为 var 如果您需要访问属性 稍后的对象。这 是 LINQ 查询中的常见场景 表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2011-05-17
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多