2012-01-22 107 views
0

我正在寫做一個鑄件的方法,我需要收到類型放慢參數,例如:如何接收類型作爲參數?

object foo(?? type, object input) { 

    if(type is x) { 
     Output output = new Output(); 
     x xValue = (x) input; 
     foreach(var val xValue) { 
      //do.. 
     } 

     return output; 
    } 

    if(type is y) { 
      Output2 output = new Output2(); 
      y yValue = (y) input; 

     foreach(var val yValue) { 
      //do.. 
     } 

     return output; 
    } else { 
     //invalid type 
    } 
} 

爲解決這個問題不同的方式表示讚賞太:)

在此先感謝。

+0

類型爲'系統。鍵入'或鍵入特定(或繼承)類型的對象? –

+0

類型爲'CookieCollection','CookieContainer' .. – Jack

回答

4

使用類型參數:

object foo<T>(T input) { 
    if (T is x) { ... 
    ... 

而且,你的方法是有點怪異,似乎有很多共性的在你的分支,並測試類型通常不是一個好方法。作出努力,以統一他們或拆分方法特定類型的重載:

Output foo(x input) ... 

Output2 foo(y input) ... 

... 

而且,嘗試使用更具體的返回類型,如上圖所示。

1

做什麼你問:

object foo(System.Type type, object input) { 
... 
} 

但是你爲什麼不使用的每種類型的不同的方法?通過使用可以處理不同類型的單片方法,您會獲得什麼?

1

這聽起來像你想要一個Type作爲輸入,其中類型是input參數的類型。如果是這樣那麼最簡單的方法是使用一個通用的功能

object foo<T>(T input) { 
    Type type = typeof(T); 
    ... 
} 

你甚至可以有一個重載採取Type明確,並具有通用功能飼料進去

object foo<T>(T input) { 
    return foo(typeof(T), input); 
} 

object foo(Type type, object input) { 
    ... 
} 
+0

你可以在此擴展嗎?這正是我要找的。我正在請求數據集中的值,並且我要求開發者發送變量類型以便返回,以便我的返回語句類似於(returnType)ds.Tables [0] .Rows [0] [columnName] – ganders

+0

在這種情況下,@ganders你會基本上做一些如下所示的'T foo (){return(T)...; }' – JaredPar