在C#中通过参数执行方法

时间:2010-10-20 18:59:23

标签: c# methods

我将从一开始就不知道这个术语或者是否可能(我很确定它可以完成)。

我有一大堆代码基本如下:

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。我可以获得更好的样本,关于如何做到这一点的资源吗?

意识到由于我不知道我在说什么,上面的代码并不是完全我正在寻找的东西,而是为了让我的观点得到解决。

3 个答案:

答案 0 :(得分:2)

你可以做一个像

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

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

答案 1 :(得分:1)

你有几个选项(在我的头脑中)基本上适用于任何版本的框架:

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

根据您的要求,这些中的任何一个都应该工作,您所在的最简单的“下一步”可能是更改为switch语句,然后查看使用命令模式。反射可能很棒,但如果您以高容量进行反射并且不小心使用良好的缓存,则反之亦然。如果您决定朝这个方向前进,Fasterflect会有所帮助。

在.NET 4.0(可能是3.5)中,您还可以使用动态和表达式树来执行类似的操作,但这可能比您想要为当前实现编写的代码更多。

答案 2 :(得分:0)

您可能正在寻找delegates.