Viyi.Util/ViyiToolkit.cs

(完整代码) 1KB

using System.Diagnostics.CodeAnalysis;

namespace Viyi.Util;

public static class ViyiToolkit {
    public static T SuppressException<T>(this Func<T> fn, Func<T> alternate) {
        try { return fn(); }
        catch { return alternate(); }
    }

    public static T SuppressException<T, E>(this Func<T> fn, Func<T> alternate) where E : Exception {
        try { return fn(); }
        catch (E) { return alternate(); }
    }

    public static T SuppressException<T>(this Func<T> fn, Func<Exception, bool> predicate, Func<T> alternate) {
        try { return fn(); }
        catch (Exception e) when (predicate(e)) {
            return alternate();
        }
    }

    public static T SuppressException<T>(this Func<T> fn, Type exceptionType, Func<T> alternate) =>
        SuppressException(fn, e => exceptionType.IsAssignableFrom(e.GetType()), alternate);

    [return: NotNullIfNotNull(nameof(alternate))]
    public static T? SuppressException<T, E>(this Func<T> fn, T? alternate = default) where E : Exception {
        try { return fn(); }
        catch (E) { return alternate; }
    }

    [return: NotNullIfNotNull(nameof(alternate))]
    public static T? SuppressException<T>(this Func<T> fn, T? alternate = default) {
        try { return fn(); }
        catch { return alternate; }
    }

    [return: NotNullIfNotNull(nameof(alternate))]
    public static T? SuppressException<T>(this Func<T> fn, Func<Exception, bool> predicate, T? alternate = default) {
        try { return fn(); }
        catch (Exception e) when (predicate(e)) {
            return alternate;
        }
    }

    [return: NotNullIfNotNull(nameof(alternate))]
    public static T? SuppressException<T>(this Func<T> fn, Type exceptionType, T? alternate = default) =>
        SuppressException(fn, e => exceptionType.IsAssignableFrom(e.GetType()), alternate);
}

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

AI 解读

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

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