【问题标题】:Why C# cannot infer type for class member? [duplicate]为什么 C# 不能推断类成员的类型? [复制]
【发布时间】:2012-09-18 18:21:16
【问题描述】:

可能重复:
Implicit typing; why just local variables?

c# 允许这样做:

public class MyClass
{
    public void Foo()
    {
        var q = new MyObject();
    }
}

但它不允许这样做:

public class MyClass
{
    var q = new MyObject();

    public void Foo()
    {
        // ...
    }
}

这是有原因的吗?谢谢。

【问题讨论】:

标签: c# .net type-inference


【解决方案1】:

您只能对局部变量使用类型推断。

var keyword 推断“在方法范围内声明的”变量的类型。在语言方面,var 用于定义“隐式类型的局部变量声明”(C# Language Spec 8.5.1)。该语言仅将var 用于局部变量,而不是类型级变量。

至于为什么,这取决于 C# 设计者的意图。 打算推断所有用法的类型,仅针对特定场景。 Eric Lippert described why this was done,提供了许多扩展使用会导致的潜在陷阱,包括可能公开暴露匿名类型、链接多个初始化器等等。

【讨论】:

  • 问题是为什么它是这样定义的。
  • 那么为什么他们只打算针对这个特定场景而不是其他场景呢?或者,对他们的大脑缺乏洞察力,您认为这是什么原因?
  • @delnan 我刚刚发布了一个链接,其中包含一些很棒的见解 - 但它仅适用于当地人。我怀疑整个理由纯粹是针对 LINQ 和匿名类型,这两种类型都只需要本地人的支持才能工作。扩大使用会导致大量潜在陷阱(请参阅 Eric 的帖子)
  • 太好了,现在您可以删除其余的答案,因为它不相关。然后重述链接博文的重点,以及自己的想法,对答案(因为links alone aren't good answers)。
  • 是的,总结一个(好的)链接并包含它是一个更好的答案。不过,当我写我之前的评论时,情况并非如此。我还没有删除我的反对票,因为我认为由于前面所述的原因,整个答案弊大于利。至于其余部分的相关性,对我来说,OP 的含义似乎很明显。我也拒绝相信 SO 用户无法意识到某事是这样的,因为有人决定这样做,出于某些对他们来说有意义的原因。说这是数学家的答案(借用 TVTropes 术语),准确但无用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多