我搞砸泛型和IEnumerable abit,但我好心卡住了。 這是我想要做的: 我想有一個方法返回任何集合類型 - 實現IEnumerable(?) - (例如:List,Stack,Queue,...)返回一個通用的IEnumerable <T>
此外,我希望能夠返回任何數據類型的集合類型。 ,所以我想這個方法能夠返回一個List<string>,
以及一個Stack<int>
,以及一個List<double>
...等等等等
public IEnumerable<T> returnSomething()
{
Stack<int> stackOfInts = new Stack<int>();
List<string> listOfStrings = new List<string>();
return stackOfInts;
}
這是我到目前爲止已經試過。然而,這並不工作,我得到這個錯誤:但是
Cannot implicitly convert type 'System.Collections.Generic.Stack<int>' to 'System.Collections.Generic.IEnumerable<T>'. An explicit conversion exists (are you missing a cast?)
,如果我在方法簽名更換IEnumerable<T>
到IEnumerable<int>
,我可以返回一個int類型的任何集合。然而,這意味着,現在我不能返回ListOfStrings
了。
會喜歡你需要一個generic type parameter添加到您的方法有任何建議或想法:)
感謝,這工作確實,但現在我似乎無法添加任何東西到堆棧..stackOfInts.Push(3);如果我嘗試這個,它會說:「最好的重載比賽..有一些無效的參數」。有任何想法嗎? – Thousand 2012-07-11 21:08:06
@JaneDoe:你只能添加'T'到'Stack'。 3不一定是'T'。除非你添加[泛型約束](http://msdn.microsoft.com/en-us/library/d5x73970.aspx),否則你不知道'T'是什麼,所以你甚至不能構建一個 - 要做到這一點,你需要一個'new()'約束。你想做什麼,爲什麼你需要這個? –
2012-07-11 21:10:07
我不需要這個特別的東西,我只是嘗試了一堆東西。但我現在明白了,謝謝。 – Thousand 2012-07-11 21:12:11