我不知道如何在不使用示例的情况下说出这个问题,所以我们在这里......
我已经定义了这样一个类:
public class Orchestration<T1, T2, T3>
{
Run Code Online (Sandbox Code Playgroud)
使用此构造函数:
public Orchestration(Action<T1, T2, T3> action, int maxNumberOfRetries)
Run Code Online (Sandbox Code Playgroud)
还有一个名为Run的方法:
public bool Run(T1 one, T2 two, T3 three)
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做:
var orchestration = new Orchestration<string, string, bool>(File.Copy, 5);
orchestration.Run("c:\filename.txt", "d:\filename.txt", true)
Run Code Online (Sandbox Code Playgroud)
然后业务流程会在返回false之前尝试运行File.Copy 5次,这意味着作业失败了(这里的背景是我试图从一个只能偶尔工作的磁盘中拯救som文件)
Orchestration类是通用的,我可以用它来运行任何有三个参数的方法.
我的问题是:我能否以一种不需要事先确定参数数量的方式定义Orchestration类?
我的目标是使其能够运行任何方法,而不仅仅是采用三个参数的方法......
Ree*_*sey 10
在C#中使用泛型无法做到这一点.这需要类似于C++中的可变参数模板,但在托管世界中没有相同的功能.这就是为什么类Tuple
具有如此多的不同类和工厂方法来创建各种版本的原因.
如果您的参数是非泛型的(即:)object
或总是字符串,您可以使用params
允许可变数量的参数.
只需让它接受Action
并关闭您对实际方法的任何参数:
public Orchestration(Action action, int maxNumberOfRetries)
Run Code Online (Sandbox Code Playgroud)
var orchestration = new Orchestration(
() => File.Copy("c:\filename.txt", "d:\filename.txt", true), 5);
Run Code Online (Sandbox Code Playgroud)
这意味着在构造时知道参数值,而不是在调用时Run
,但在这种情况下看起来不应该是一个你无法解决的问题.
归档时间: |
|
查看次数: |
695 次 |
最近记录: |