2014-10-20 85 views
-3

這個想法是使一個方法可以返回不同類型,在我的情況下,字符串數組,字符串堆棧和字符串列表。C#泛型從一個方法返回多個類型

這是hypotetical代碼:

static <T> TestMethod<T>(string [] test,int option) 
{ 
    switch (option) 
    { 
     case 1://Return array of strings 
     return test; 

     case 2: 
     return new List<string>(test); 

     case 3: 
     return new Stack<string>(test); 
    } 
} 

我輸入的字符串列表,並在輸出得到我所需要的,通過指定的選項。

現在,該代碼給stackoverflow上的errorsm和其他答案的負載都是模糊和混淆,所以我避免了它們(我試圖讀取它們中的10個,而沒有一個是清晰的,並且都是編譯錯誤)

從我所理解的一個錯誤是,我不能簡單地做

static <T> TestMethod<T> 

,因爲我需要以某種方式什麼T是(字符串,列表等)申報。

不,我想返回我喜歡的東西。我看到有人使用Convert.ChangeType,但我想知道你認爲什麼是這種情況的最佳解決方案。

+4

'我想回到我like'你就是不行。最好你可以返回'IEnumerable '通用的數組,列表和堆棧。 – 2014-10-20 20:47:50

+0

在這種情況下,最好的解決方案很難確定,因爲目前尚不清楚您嘗試解決的實際問題。如何返回任意東西有用的方法? – 2014-10-20 20:48:57

+0

我想回到IEnumerable接口,正如我在其他人建議接口使用的答案中看到的那樣。問題是我對接口有一種特別的憎恨(請參閱我的其他問題),因爲我不知道如何處理一個枚舉,我不知道如何使用接口並且從未理解它們。 @JeroenMostert該方法將不得不返回與Directory.GetDirectories或GetFiles的文件夾或文件的列表,並返回所需的輸出格式 – user2235691 2014-10-20 20:55:50

回答

2

此時,您的方法不是通用的,因爲它與T參數無關 - 一種選擇是使輸出類型成爲與所有可能的返回值兼容的類型(以您的示例爲例,您的選擇爲ICollectionIEnumerable,並IEnumerable<string>):

static IEnumerable<string> TestMethod(string [] test,int option) 
{ 
    switch (option) 
    { 
     case 1://Return array of strings 
     return test; 

     case 2: 
     return new List<string>(test); 

     case 3: 
     return new Stack<string>(test); 
    } 
} 

如果你想使通用的第一個參數,你可以這樣做:

static IEnumerable<T> TestMethod<T>(T [] test,int option) 
{ 
    switch (option) 
    { 
     case 1://Return array of strings 
     return test; 

     case 2: 
     return new List<T>(test); 

     case 3: 
     return new Stack<T>(test); 
    } 
} 
+0

好的。我討厭接口,從來不理解爲什麼它們是有用的,從不需要它們,但我想我必須忍受它們,嘆息...所以,一旦我擺脫了方法,我將如何使用IEnumerable?它是什麼?像列表一樣?像堆棧一樣?像什麼? – user2235691 2014-10-20 21:01:36

+0

「永遠不明白爲什麼它們是有用的,永遠不需要它們」是雞和雞蛋的問題。你應該相信身邊的證據,即接口的概念既值得理解也有用,而且你可能想要將泛型添加到你應該考慮更多地瞭解的有用事物列表中。 – 2014-10-20 21:04:34

+0

'user2235691好的。我討厭接口,從來不理解爲什麼它們是有用的,從不需要它們,但我想我必須忍受它們,只是因爲你不明白它並不會讓它變得糟糕。特別值得一讀的是這樣的東西'IEnumberable'它拯救了我的生命很多次.. :)祝你好運 – MethodMan 2014-10-20 21:06:31

相關問題