Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将不带参数的操作装配到操作中<;T>;_C#_Generics - Fatal编程技术网

C# 将不带参数的操作装配到操作中<;T>;

C# 将不带参数的操作装配到操作中<;T>;,c#,generics,C#,Generics,我有这个方法 private void ProcessItem<T>(FileSystemInfo itemInfo, int itemMinAge, Action<T> action, T parameter, string errorMessage, string successMessage = "") private void ProcessItem(FileSystemInfo itemInfo、int itemMinAge、Action Action、T参数

我有这个方法

private void ProcessItem<T>(FileSystemInfo itemInfo, int itemMinAge, Action<T> action, T parameter, string errorMessage, string successMessage = "")
private void ProcessItem(FileSystemInfo itemInfo、int itemMinAge、Action Action、T参数、string errorMessage、string successMessage=“”)
适合我8个电话中的7个,例如

ProcessItem<bool>(subDir, dir.MinAge, subDir.Delete, true, string.Format(Messages.NotDeletedFolder, subDir.FullName));
ProcessItem(subDir,dir.MinAge,subDir.Delete,true,string.Format(Messages.NotDeletedFolder,subDir.FullName));
它获取一个目录,如果
dir.MinAge
满足某些条件,则调用目录上的
subDir.Delete(true)
,并记录一条消息。但是我还有一个调用,其中参数
action
需要不带
参数,因为我需要传递一个不带任何参数的
void
方法

有没有办法让这个调用适合这个方法?我不想仅仅因为一个调用就创建另一个方法。

ProcessItem(subDir,dir.MinAge,
ProcessItem<object>(subDir, dir.MinAge,
    ignored => subDir.NoArgs(),
    /* ignored */ null,
    string.Format(Messages.NotDeletedFolder, subDir.FullName));
忽略=>subDir.NoArgs(), /*忽略*/null, 格式(Messages.NotDeletedFolder,subDir.FullName));
ProcessItem(子目录、目录、,
忽略=>subDir.NoArgs(),
/*忽略*/null,
格式(Messages.NotDeletedFolder,subDir.FullName));

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

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

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

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

ProcessItem<bool>( ... (param) => myMethod(), ... );
ProcessItem<bool>(subDir, dir.MinAge, _ => ParameterlessCall() , true, ...
ProcessItem(…(param)=>myMethod(),…);
在这种情况下,参数
param
将被忽略,而
myMethod
将正常调用。

ProcessItem(subDir,dir.MinAge,=>ParameterlessCall(),true。。。
ProcessItem<bool>(subDir, dir.MinAge, _ => ParameterlessCall() , true, ...
在lambda表达式中使用
\u
作为参数名是一种函数式编程习惯用法,用于不需要检查其值的参数。

ProcessItem(subDir,dir.MinAge,=>ParameterlessCall(),true。。。

在lambda表达式中使用
\uuu
作为参数名称是一种函数式编程习惯用法,用于不需要检查其值的参数。

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

private void ProcessItem<T>(FileSystemInfo itemInfo, int itemMinAge, Action<T> action = null, Action action2 = null, T parameter, string errorMessage, string successMessage = "")
private void ProcessItem(FileSystemInfo itemInfo,int itemMinAge,Action Action=null,Action action2=null,T参数,字符串errorMessage,字符串successMessage=“”)

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

private void ProcessItem<T>(FileSystemInfo itemInfo, int itemMinAge, Action<T> action = null, Action action2 = null, T parameter, string errorMessage, string successMessage = "")
private void ProcessItem(FileSystemInfo itemInfo,int itemMinAge,Action Action=null,Action action2=null,T参数,字符串errorMessage,字符串successMessage=“”)

可以接受,但在我看来有点笨拙。无论如何,谢谢。可以接受,但在我看来有点笨拙。无论如何,谢谢。我不喜欢代码中的下划线。你说得有道理,但不是每个人都知道函数式编程。我将使用一个单词表达式。我不喜欢代码中的下划线。你说得有道理,但不是每个人都知道乐趣语法编程。我将使用一个单词表达式。