Viyi.Util.Build/Builder/EnumerableMaxMinBuilder.cs

(完整代码) 1KB

namespace Viyi.Util.Build.Builder;

internal class EnumerableMaxMinBuilder : Builder {
    static readonly string[] Types = new[] {
        "int", "uint", "short", "ushort",
        "long", "ulong", "byte", "sbyte",
        "decimal", "float", "double"
    };

    public EnumerableMaxMinBuilder() : base(@"Linq\Enumerable_MM.gen.cs") {
    }

    protected override void WriteHeader() {
        base.WriteHeader();
        WriteLine(@"
using System;
using System.Collections.Generic;
using System.Linq;

#if NETSTANDARD2_0 || NETSTANDARD2_1
namespace System.Linq;

public static partial class EnumerableExtensions
{");
    }

    protected override void WriteFooter() {
        WriteLine(@"
}
#endif");
        base.WriteFooter();
    }

    protected override void WriteContent() {
        foreach (var type in Types) {
            WriteLine(@$"
    public static T MaxBy<T>(this IEnumerable<T> source, Func<T, {type}> selector) {{
        return source.Aggregate((last, next) =>
            selector(next) > selector(last) ? next : last
        );
    }}

    public static T MinBy<T>(this IEnumerable<T> source, Func<T, {type}> selector) {{
        return source.Aggregate((last, next) =>
            selector(next) < selector(last) ? next : last
        );
    }}");
        }
    }
}

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。