【问题标题】:No best type found for implicitly-typed array未找到隐式类型数组的最佳类型
【发布时间】:2021-07-03 03:46:55
【问题描述】:

有人能解释一下为什么这个代码:

var marketValueData = new[] {
    new { A = "" },
    new { A = "" },
    new { B = "" },
};

给我错误:

没有找到隐式类型数组的最佳类型

虽然这个工作非常好:

var marketValueData = new[] {
    new { A = "" },
    new { A = "" },
    new { A = "" },
};

除了不同的属性(第一个示例的最后一个条目中的B)之外,它们是相同的。然而第一个没有编译。为什么?

【问题讨论】:

  • 更简单的示例将是 new[] { 1, "text", true } - 不同元素类型的相同问题,但要短得多。
  • @AlexeiLevenkov 我已经简化了一点,但你的例子是不同的情况(不同的类型而不是不同的属性名称)。
  • @CodeCaster 你也可以编辑答案吗?目前,它们似乎与问题无关:-(
  • @CodeCaster - 您的编辑很好地显示了原始问题。我想实际的问题应该是“不是所有匿名类型都属于同一类型,或者匿名类型的相同定义是什么”......

标签: c#


【解决方案1】:

你可以使用:

var marketValueData = new object[] {
    new { A = "" },
    new { A = "" },
    new { B = "" },
    ...,
};

【讨论】:

  • 这是对问题中隐含问题的唯一解决方案
  • 我今天刚刚遇到这个问题和答案,因为有人在这里编辑了一些东西,我想说这个答案在这个问题上不够,因为这个问题明确要求解释为什么它无法编译,这个答案并没有试图解释这一点。
【解决方案2】:

这是因为在第一个例子中你有两个不同的匿名类型,最后一项的定义与其他的不同。

在第一个示例中,一个包含A 属性和一个包含B 属性,编译器无法确定数组的类型。在第二个示例中,有一种匿名类型,仅包含 A

我认为这是一个错字,所以您可以在第一个示例的最后一个条目中将B 更改为A

来自MSDN

您可以创建一个隐式类型数组,其中的类型 数组实例是从数组中指定的元素推断出来的 初始化器。

【讨论】:

    【解决方案3】:

    匿名类型必须相同。只需将B 更改为A

    【讨论】:

      【解决方案4】:

      我在这样的代码行中遇到了类似的问题

      sqwOraContext.save(new[] { student, course });

      student 和 course 都从 SQWEntity 继承,但由于某种原因编译器不检查基类型。 只有将数组类型设置为 SQWEntity 才能解决该错误。

      sqwOraContext.save(new SQWEntity[] { student, course });

      当然没有必要在这样的一行中指定类型,其中学生1,学生2属于同一类型。

      sqwOraContext.save(new[] { student1, student2 });

      【讨论】:

        【解决方案5】:

        你也可以写一个强匿名类型:

        var d = default(string); // default value for A and B properties
        var marketValueData = new[] {
            new { A = "", B = d },
            new { A = "", B = d },
            new { A = d, B = "" },
        };
        

        【讨论】:

        • 这仍然不能正确解释为什么问题中的第一段代码无法编译。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        • 1970-01-01
        • 2014-12-28
        • 2021-09-15
        • 1970-01-01
        • 2016-05-15
        • 2017-03-26
        相关资源
        最近更新 更多