我的项目中有多个函数执行完全相同的操作,这些函数之间的唯一区别是函数签名和操作方法签名中的参数不同,该函数在ex函数中调用。
function DoSomething(string x, datatable dt, Action<string, datatable> methodname ){ methodname(x, dt);}
function DoSomething(datatable dt1, datatable dt2, Action<datatable, datatable> methodname ){ methodname(dt1, dt2);}
function DoSomething(Class FOO, datatable dt2, Action<class, datatable> methodname ){ methodname(FOO, dt2);}
我正在尝试合并此代码,以便我可以使用一个函数接受任何参数并调用action方法。我已经将一个以List作为参数的函数放在一起,如下所示:
List<object> list_obj = new List<object>();
List_obj.Add(Datatable)
List_obj.Add(Class FOO)
function DynamicDoSomething<T>(Action<T> methodname, T Parameter) {methodname(Parameter)}
我的问题是将这个对象引入函数的这种方法,但是我接着通过List循环来尝试创建或分配DataTables或类,具体取决于函数中所需的内容。对于Ex:
function methodbeingcalled(List<object> objlist){
foreach(var item in objlist){
string ObjType = item.GetType().ToString();
if (ObjType.Equals("System.Data.DataTable"))
{
dt= ((DataTable)item);
}
else { foo = ((Foo)item);}
}
}
他们是一个更好的方法,因为分配的foreach似乎是一个HACK
答案 0 :(得分:0)
您的签名看起来像这样:
DoSomething<TInput>(TInput x, DataTable dt, Action<TInput, DataTable> methodname)
然后你可以这样称呼:
DoSomething("Some string value.", someDataTable, (input, dt) => { });
或者像这样:
DoSomething(someObject, someDataTable, (input, dt) => { });
现在在所有情况下TInput
都已正确输入。