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なしである必要がある呼び出しも 1 つあります。<T>void

この 1 つの呼び出しをこのメソッドに適合させる方法はありますか? 1回の呼び出しのためだけに別のメソッドを作成したくありません。

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, ...

ラムダ式でパラメーター名として使用_することは、値を検査する必要のないパラメーターの関数型プログラミング イディオムです。

于 2013-02-19T17:18:46.177 に答える
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 に答える
1

最も簡単な方法は、おそらくラムダ式を使用することです。

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

この場合、パラメータparamは単純に無視さmyMethodれ、通常どおり呼び出されます。

于 2013-02-19T17:18:40.660 に答える