代码之家  ›  专栏  ›  技术社区  ›  rory.ap

集合表达式没有目标类型

  •  2
  • rory.ap  · 技术社区  · 1 年前

    使用 C# 12's new collection expressions ,我不能这样做:

    if (["blue", "red", "foo"].Any((x) =>
    {
        ...
    })) 
    

    它给出一个CS9172编译器错误“集合表达式没有目标类型。”而不是 ["blue", "red", "foo"] ,我必须做 new[] { "blue", "red", "foo" } --C#12之前的方式 必须指定类型。

    很明显,集合表达式只包含一种类型。编译器无法确定类型是否有技术原因?如果可能的话,这将是使用该新功能的一种非常简洁和有用的方式。

    1 回复  |  直到 1 年前
        1
  •  4
  •   Guru Stron    1 年前

    这就是功能的设计方式。集合表达式没有“自然类型”(至少目前是这样)(因为很长一段时间以来lambda表达式都没有)。正如医生所说:

    集合表达式是一种简洁的语法,当对其求值时,可以将其分配给许多不同的集合类型。

    如果您将提供类型,代码将编译。例如

    if (((string[])["blue", "red", "foo"]).Any((x) => true))
    {
       ...
    }
    

    Demo @sharplab.io

    转换规则在中定义 Conversions 部分。