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

标签 c# linq ushort

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

例如:

List<ushort> takeMaxmumId = new List<ushort>();
var max = takeMaxmumId.Select(x=>x).DefaultIfEmpty(1).Max();

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

'IEnumerable' does not contain a definition for 'DefaultIfEmpty' and the best extension method overload 'Queryable.DefaultIfEmpty(IQueryable, int)' requires a receiver of type 'IQueryable'

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

最佳答案

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

您可以通过强制 ushort 来解决这个问题默认输入:

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

Demo.

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

var max = takeMaxmumId.Select(x => (int)x).DefaultIfEmpty(1).Max();

关于C# 不能在 ushort 列表项中使用 Linq DefaultIfEmpty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44747919/

相关文章:

c# - 为什么程序使用添加到委托(delegate)的最后一个方法?

c# - 当 "sealed"是可选的时,C# 中 "virtual"的用途是什么?

c# - 将 Winforms 控件添加到窗体时是否引发事件

c# - 更改 LINQ 对象数据上下文

C# ushort[] 到字符串的转换;这可能吗?

c# - 如何忽略 EF 4.3 迁移中的表/类

c# - 在 Lambda 语法中绕过 int.TryParse 的 else block

c# - 使用 LINQ 对列值进行排序,忽略空字符串值

c# - 为什么 'int' 可以被视为 'ushort' 而不是在扩展方法中作为参数传递时,什么是优雅的解决方案?