簡體   English   中英

如何從字符串轉換泛型T並將其值傳遞給另一個函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM