Viyi.Util/Extensions/ObjectExtensions.cs

(完整代码) 1KB

namespace Viyi.Util.Extensions;

/// <summary>
/// 包含一系列对<c>object</c>进行扩展的方法的类。
/// </summary>
public static partial class ObjectExtensions {
    /// <summary>如果 `predicate` 运算得到 `true`,则执行 `fn`</summary>
    /// <remarks>
    /// 不管是否执行 `fn`,都会返回该扩展方法的调用者。
    /// 该扩展方法是对 `Also` 扩展方法在具有分支条件情况下的简单封装。
    /// </remarks>
    public static T If<T>(this T me, Func<T, bool> predicate, Action<T> fn) {
        if (predicate(me)) { fn(me); }
        return me;
    }

    /// <summary>如果 `predicate` 运算得到 `false`,则执行 `fn`</summary>
    /// <remarks>
    /// 不管是否执行 `fn`,都会返回该扩展方法的调用者。
    /// 该扩展方法是对 `Also` 扩展方法在具有分支条件情况下的简单封装。
    /// </remarks>
    public static T IfNot<T>(this T me, Func<T, bool> predicate, Action<T> fn) {
        if (!predicate(me)) { fn(me); }
        return me;
    }

    /// <summary>如果调用者与 `expect` 等价,则执行 `fn`</summary>
    /// <remarks>
    /// 不管是否执行 `fn`,都会返回该扩展方法的调用者。
    /// 该扩展方法是对 `Also` 扩展方法在在对比特定值情况下的简单封装。
    /// </remarks>
    public static T If<T>(this T me, T expect, Action<T> fn) where T : IEquatable<T> =>
        me.If(it => expect == null ? it == null : it?.Equals(expect) == true, fn);

    /// <summary>如果调用者与 `expect` 不等,则执行 `fn`</summary>
    /// <remarks>
    /// 不管是否执行 `fn`,都会返回该扩展方法的调用者。
    /// 该扩展方法是对 `Also` 扩展方法在对比特定值情况下的简单封装。
    /// </remarks>
    public static T IfNot<T>(this T me, T expect, Action<T> fn) where T : IEquatable<T> =>
        me.IfNot(it => expect == null ? it == null : it?.Equals(expect) == true, fn);
}

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

AI 解读

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

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