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