C# 不能在 ushort 列表项中使用 Linq DefaultIfEmpty?

Ali*_*efi 6 c# linq ushort

我想取 ushort 列表的最大值,当该列表为空时,我想将默认值设置为“1”。

例如:

List<ushort> takeMaxmumId = new List<ushort>();
var max = takeMaxmumId.Select(x=>x).DefaultIfEmpty(1).Max();
Run Code Online (Sandbox Code Playgroud)

在我的示例 Visual Studio 中向我显示此错误:

“IEnumerable”不包含“DefaultIfEmpty”的定义,最佳扩展方法重载“Queryable.DefaultIfEmpty(IQueryable, int)”需要“IQueryable”类型的接收器

当我的列表类型为 int 时,我没有任何问题,ushort 类型中有什么问题?我怎样才能以最好的方式解决这个问题?

das*_*ght 6

问题是Select产生一个IEnumerable<ushort>,而DefaultIfEmpty提供一个int默认值。因此,类型不匹配。

您可以通过强制ushort使用默认类型来解决此问题:

var max = takeMaxmumId.Select(x=>x).DefaultIfEmpty<ushort>(1).Max();
//                    ^^^^^^^^^^^^^
//            This part can be removed
Run Code Online (Sandbox Code Playgroud)

演示。

您还可以将序列元素转换为int

var max = takeMaxmumId.Select(x => (int)x).DefaultIfEmpty(1).Max();
Run Code Online (Sandbox Code Playgroud)

  • 你不需要`Select` (2认同)
  • 没有任何地方可以测试它,但是您也可以,这些是泛型,以这种方式指定类型吗?`list.DefaultIfEmpty&lt;ushort&gt;().Max()?` (2认同)