集合表达式没有目标类型

ror*_*.ap 5 .net c# .net-8.0 c#-12.0

使用C# 12 的新集合表达式,我无法执行以下操作:

if (["blue", "red", "foo"].Any((x) =>
{
    ...
})) 
Run Code Online (Sandbox Code Playgroud)

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

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

Gur*_*ron 7

这就是该功能的设计方式。集合表达式没有“自然类型”(至少目前如此)(相当长一段时间没有 lambda 表达式)。正如医生所说:

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

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

if (((string[])["blue", "red", "foo"]).Any((x) => true))
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

演示@sharplab.io

转换规则在文档的转换部分中定义。