我想取 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 类型中有什么问题?我怎样才能以最好的方式解决这个问题?
问题是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)