c#多个函数的动作动态参数

时间:2013-12-17 15:33:51

标签: c# collections action

我的项目中有多个函数执行完全相同的操作,这些函数之间的唯一区别是函数签名和操作方法签名中的参数不同,该函数在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

1 个答案:

答案 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都已正确输入。