c# - 有没有办法概括 Action 和 Action<T>?

标签 c# generics action extension-methods

所以我有一个扩展方法,允许我在执行操作时记录一些内容。实现是这样的:

public static Action Log(this Action action, string log) {
    return (() => {
        Console.WriteLine(log);
        action();

    });
}

但我想允许操作也是一个 Action<T> .有没有办法概括这一点,以便 log被记录,但它不会更改操作的签名?

或者我需要 2 种方法,一种用于 Action和一个 Action<T>

最佳答案

您需要单独的方法,但您可以根据另一个来实现一个以减少代码重复:

鉴于您现有的 Log(Action action, string log),您可以添加:

public static Action<T> Log<T>(this Action<T> action, string log) {
    return t => Log(() => action(t), log);
}

或者反过来:

public static Action<T> Log(this Action<T> action, string log) {
    return t => {
        Console.WriteLine(log);
        action(t);
    });
}

public static Action Log(this Action action, string log) {
    return () => Log<object>(t => action(), log);
}

关于c# - 有没有办法概括 Action 和 Action<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37482894/

相关文章:

c# - 是否可以通过编程方式确定 ASP.NET MVC Razor View 模型?

c# - 使用格式化选项将多个 radgrids 上传到单个 excel 表

c# - 我可以将泛型设为可选,默认为某个类吗?

node.js - 如何为具有特定 :id? 的模型创建操作

java - 当应用程序处于后台时,无法在通知上看到操作按钮

c# - 这是使用异常的正确方法吗?

c# - 枚举关联时如何改善糟糕的 EF4 性能?

typescript - 将接口(interface)中的字段类型替换为 promise

java - 如何将 Jackson TypeReference 用于泛型类

c# - 如何创建公共(public)操作,但保持调用私有(private)?