C# 如何将带有参数的函数作为参数传递给函数?
我希望创建一个扩展方法,它接受一个参数为C# 如何将带有参数的函数作为参数传递给函数?,c#,C#,我希望创建一个扩展方法,它接受一个参数为IEnumerable的函数 要扩展的功能 对于这两种选择 Method(EnumerableParameter).RetrySection(EnumerableParameter,TableName,NumberOfRetries); 扩展方法 public static void RetrySection(此Func操作、IEnumerable参数、字符串数据库表、int jobcount) { int jobRowCount=ValidateTab
IEnumerable
的函数
要扩展的功能
对于这两种选择
Method(EnumerableParameter).RetrySection(EnumerableParameter,TableName,NumberOfRetries);
扩展方法
public static void RetrySection(此Func操作、IEnumerable参数、字符串数据库表、int jobcount)
{
int jobRowCount=ValidateTable(databaseTable).GetAwaiter().GetResult();
int重试=0;
做
{
作用(参数);
jobRowCount=ValidateTable(databaseTable).GetAwaiter().GetResult();
重试++;
}
而((jobRowCount<(jobcount*2))&重试<3);
}
我发现错误
Func
不接受0个参数。解决方案是使用:
Method.RetrySection(EnumerableParameter,TableName ,NumberOfRetries);
因为这是RetrySection定义用于-Func而不是result-bool的内容
或者,在第二个示例的情况下:
RetrySection(Method,EnumerableParameter,TableName ,NumberOfRetries);
尝试向第一个方法添加大括号,如
()=>{return Method(EnumerableParameter);}
调用该扩展方法时必须使用有效的委托实例。无法扩展原始方法调用本身。您需要传递从该方法创建的委托,这将阻止使用该语言的方法组来委托推理功能。您可以执行((Func)方法).RetrySection(枚举参数,…)
或RetrySection(方法,枚举参数,…)
。尽管坦率地说,我发现两种方法都没有达到通用重试实现的目的。请参阅duplicate以了解应该如何执行此操作。如何调用操作。在do while循环中,如果我正在扩展布尔值?您不是在扩展布尔值,而是在扩展一个函数,该函数接受IEnumerable并返回布尔值:void RetrySection(此Func操作
我认为第一个选项不会编译为Method.RetrySection
。您应该将该方法转换为((Func)Method).RetrySection
您在@devNull时是对的,它是必需的:
Method(EnumerableParameter).RetrySection(EnumerableParameter,TableName,NumberOfRetries);
public static void RetrySection(this Func<IEnumerable<T>,bool> action, IEnumerable<T> parameter,string databaseTable,int jobcount)
{
int jobRowCount = ValidateTable(databaseTable).GetAwaiter().GetResult();
int retry = 0;
do
{
action(parameter);
jobRowCount = ValidateTable(databaseTable).GetAwaiter().GetResult();
retry++;
}
while ((jobRowCount < (jobcount * 2)) && retry < 3);
}
Method.RetrySection(EnumerableParameter,TableName ,NumberOfRetries);
RetrySection(Method,EnumerableParameter,TableName ,NumberOfRetries);