2010-10-20 51 views
1

我将从头开始我不知道这个术语,或者甚至可能(我确信它可以完成)。通过C#中的参数执行方法#

我有一段代码,基本上是如下:

DataTable dt = new DataTable(); 

if (string = "this") 
    dt = method1(); 
else if (string = "that") 
    dt = method2(); 
else if (string = "somethingelse") 
    dt = method3(datetime, datetime2); 
else if (string = "anotherthing") 
    dt = method4(string); 
....and so on.... 

我试图让这个清洁工。比较字符串在表中。我的想法是做更多的东西像下面这样:

if (row.parmtype = "date"){ 
    dt = row.method(datetime, datetime2); 
else 
    dt = row.method(); 

因此,我调用该方法将被存储在表中的类型沿着调用它(只有3种至今)。每个调用都返回一个DataTable。我可以获得一个更好的样本,一个资源如何做到这一点?

认识到,因为我不知道我在说什么,上面的代码不是正好是我正在寻找,但是为了让我的观点。

回答

2

你可以像

var delegates = new Dictionary<string, Func<MyClass, DataTable>>() 
           { 
            {"somestr", x => x.Method1()} 
           }; 

      if (delegates.ContainsKey(key)) 
       delegates[key](this); 
+0

字典这似乎是我所期待的。谢谢! – 2010-10-20 19:42:25

1

你有几个选项(把我的头顶部),其工作的框架基本上任何版本:

  • 改变你的“如果”嵌套结构向switch
  • 你可以使用reflection在对象上,如果你是调用对象的已知功能
  • 最后,你可以使用一个Command Pattern来实现一个通用的“执行”功能,按照上面的描述进行操作,将命令和数据传递给对象并让它决定要做什么。
  • 你也可以考虑使用delegates and events根据您的需求,以及

所有的这些都应该根据您的要求工作,最简单的“下一步”,从你在哪里是很可能变成一个switch语句然后看看使用命令模式。反射可以很好,但如果你在大量使用它,而且你没有注意使用好的缓存,那么代价很大。 Fasterflect可以帮助你决定去这个方向。在.NET 4.0中(也许是3.5),你也可以看看使用动态和表达式树来做类似的事情,但是这可能比你想为当前的实现写更多的代码。