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

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

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

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

推荐答案

这就是功能设计的方式.集合表达式没有"自然类型"(至少目前是这样)(因为很长一段时间都没有lambda表达式).就像doctor 说的:

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

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

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

Demo @sharplab.io

折算规则在文档的第Conversions节中定义.

Csharp相关问答推荐

发布.NET框架项目将.NET核心元素注入到web. connect中

ASP.NET MVC购物车数量更新并从购物车中删除项目

将委托传递到serviceccollection c#web API

==和Tuple对象的相等<>

默认情况下,.NET通用主机(Host.CreateDefaultBuilder)中是否包含UseConsoleLifetime?

ASP.NET核心REST API返回一个非常大的数字

如何将MongoDB序列化程序设置为内部对象属性

当前的文化决定了错误的文化

持有者安全定义未显示在Swagger.NET 8中

CS1660无法将lambda表达式转换为类型INavigationBase,因为它不是委托类型

我的MRG32k3a算法实现返回的数字超出了预期的[0,1]范围

如何向事件添加成员

委托RequestDelegate不带2个参数-ASP.NET Core 8最小API

如何返回具有泛型的类?

如何从Azure函数使用Graph API(SDK 5.35)中的[FindMeetingTimes]

ASP.NET MVC数据批注验证组复选框

具有嵌套属性的IGGroup

如何在.NET MAUI上在iOS和Mac之间共享代码?(no条件编译和无代码重复)

.NET EF Core Automapper项目到筛选不起作用

如何对列表<;列表>;使用集合表达式?