[英]How to convert generic T from string and get its value passed to another function?
我在我的項目函數上多次使用,需要將泛型作為參數傳遞。 這些函數具有不同的輸入,但它們都需要T作為參數。
讓我用一些代碼解釋我目前在做什么:
switch (tableName)
{
case "product":
foo<Entities.Product>(value);
break;
case "customer":
foo <Entities.Customer>(value);
break;
}
這就是我想要實現的目標:
foo(MyConverter(tableName), value);
在乞討雖然不是很優雅我認為我可以逃脫它,但隨着代碼的增長,有更多的功能需要這種行為,而不僅僅是Foo。
現在我有foo2(value1,value2)foo3(value1,value2,value3)等等。
我對代表並不是很好,我知道必須有一些方法來自動實現這一點,但我無法弄明白。
有更好的想法嗎?
謝謝。
您可以嘗試將字符串映射到Action的字典。
所以類似於:
Dictionary<string, Action<ParamWrapper>> tableActions
= new Dictionary<string, Action<ParamWrapper>>();
tableActions.add("product", foo<Entities.Product>);
tableActions.add("customer", foo<Entities.Customer>);
//to call a function, just do this
tableActions["product"](valueWrapper);
其中foo定義為
void foo<T>(ParamWrapper paramWrapper) {...}
至於為foo處理各種參數,您可以將所有參數包裝到一些新類型ParamWrapper的對象中。 當調用foo時,它將從ParamWrapper中提取參數。
如果您在編譯時不知道所有表名,或者只是想要這個動態,那么您可能希望使用反射,並將反射的函數添加到字典中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.