我将从一开始就不知道这个术语或者是否可能(我很确定它可以完成)。
我有一大堆代码基本如下:
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。我可以获得更好的样本,关于如何做到这一点的资源吗?
意识到由于我不知道我在说什么,上面的代码并不是完全我正在寻找的东西,而是为了让我的观点得到解决。
答案 0 :(得分:2)
你可以做一个像
这样的字典var delegates = new Dictionary<string, Func<MyClass, DataTable>>()
{
{"somestr", x => x.Method1()}
};
if (delegates.ContainsKey(key))
delegates[key](this);
答案 1 :(得分:1)
你有几个选项(在我的头脑中)基本上适用于任何版本的框架:
根据您的要求,这些中的任何一个都应该工作,您所在的最简单的“下一步”可能是更改为switch语句,然后查看使用命令模式。反射可能很棒,但如果您以高容量进行反射并且不小心使用良好的缓存,则反之亦然。如果您决定朝这个方向前进,Fasterflect会有所帮助。
在.NET 4.0(可能是3.5)中,您还可以使用动态和表达式树来执行类似的操作,但这可能比您想要为当前实现编写的代码更多。
答案 2 :(得分:0)
您可能正在寻找delegates.