0

我有这个方法

private void ProcessItem<T>(FileSystemInfo itemInfo, int itemMinAge, Action<T> action, T parameter, string errorMessage, string successMessage = "")

这适合我的 8 个电话中的 7 个,例如

ProcessItem<bool>(subDir, dir.MinAge, subDir.Delete, true, string.Format(Messages.NotDeletedFolder, subDir.FullName));

它需要一个目录,然后如果dir.MinAge满足某些条件,则调用subDir.Delete(true)该目录并记录一条消息。但是我也有一个调用,其中参数action需要不带<T>参数,因为我需要传递一个void不带任何参数的方法。

有没有办法让这个调用适应这个方法?我不想仅仅因为一次调用而创建另一种方法。

4

4 回答 4

2
ProcessItem<object>(subDir, dir.MinAge,
    ignored => subDir.NoArgs(),
    /* ignored */ null,
    string.Format(Messages.NotDeletedFolder, subDir.FullName));
于 2013-02-19T17:18:20.587 回答
2
ProcessItem<bool>(subDir, dir.MinAge, _ => ParameterlessCall() , true, ...

在lambda_表达式中用作参数名称是函数式编程习惯用法,用于永远不需要检查其值的参数。

于 2013-02-19T17:18:46.177 回答
1

最简单的方法可能就是使用 lambda 表达式。

ProcessItem<bool>( ... (param) => myMethod(), ... );

在这种情况下,参数param将被简单地忽略并myMethod正常调用。

于 2013-02-19T17:18:40.660 回答
1

创建一个可选参数并相应地调整实现:

private void ProcessItem<T>(FileSystemInfo itemInfo, int itemMinAge, Action<T> action = null, Action action2 = null, T parameter, string errorMessage, string successMessage = "")
于 2013-02-19T17:21:49.337 回答