You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#10 .NET6中MinBy/MaxBy调用后如何内联投影单个属性

C# 中MinBy/MaxBy后直接获取指定属性的实现方法

MinBy与MaxBy的返回值为序列中符合条件的单个元素,而非LINQ常用的IEnumerable<T>集合类型,因此无法直接调用仅作用于集合的Select扩展方法,这是之前写法编译失败的核心原因。

直接内联取值写法

直接在MaxBy方法返回的结果上访问目标属性即可,无需额外调用LINQ方法:

double topPriceInList = prices.MaxBy(h => h.High).High;

空值安全处理

如果序列可能为空,或元素为可空引用/值类型,建议追加空安全逻辑避免运行时报错:

// 序列为空时返回默认值0,可根据业务需求调整默认值
double topPriceInList = prices.MaxBy(h => h.High)?.High ?? 0.0;

通用扩展方法封装

如果需要频繁实现「取最大/最小元素的指定属性」逻辑,可以封装通用扩展方法简化调用:

public static class LinqExtensions
{
    public static TResult MaxBy<TSource, TKey, TResult>(this IEnumerable<TSource> source, 
        Func<TSource, TKey> keySelector, 
        Func<TSource, TResult> resultSelector)
        where TKey : IComparable<TKey>
    {
        var maxItem = source.MaxBy(keySelector) ?? throw new InvalidOperationException("输入序列不包含任何元素");
        return resultSelector(maxItem);
    }
    
    // 同理可实现MinBy的对应重载
    public static TResult MinBy<TSource, TKey, TResult>(this IEnumerable<TSource> source, 
        Func<TSource, TKey> keySelector, 
        Func<TSource, TResult> resultSelector)
        where TKey : IComparable<TKey>
    {
        var minItem = source.MinBy(keySelector) ?? throw new InvalidOperationException("输入序列不包含任何元素");
        return resultSelector(minItem);
    }
}

// 调用示例
double topPriceInList = prices.MaxBy(h => h.High, h => h.High);

补充说明:不存在Visual Studio 2021版本,你使用的应该是Visual Studio 2022,只要项目目标框架设置为.NET 6及以上,上述所有写法都可正常编译运行。

内容的提问来源于stack exchange,提问作者SuperDave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:36:04