可能重複:
Collection<T> versus List<T> what should you use on your interfaces?確定返回內部列表<T>作爲IEnumerable <T>或ICollection <T>?
考慮這個方法,返回的變量myVar
是List<T>
,但該方法MyMethod()
的返回類型是IEnumerable<T>
:
public IEnumerable<T> MyMethod(string stuff)
{
var myVar = new List<T>();
//do stuff
return myVar;
}
本質上,我想知道的是如果returni ng myVar
作爲不同的類型是可以的。
具體而言,就我的情況而言,'do stuff'會經過DataRow
並將該DataRow
中的項目分配給對象列表。在其他地方,我也有類似的情況與ICollection
和IList
返回類型。
我想退回IEnumerable
或ICollection
的原因是,我沒有回覆超過需要。但是同時,如果需要的話,這允許調用者將返回值轉換爲List
。
但是,我的返回語句返回List
而不是方法的返回類型是奇怪的。這是正常的做法嗎?這樣做有什麼問題嗎?
澄清(響應欺騙評論):
只是爲了澄清,我很好奇的是,如果它是好的,在我的身體return語句返回一個List<T>
,但該方法標題有返回類型IEnumerable
,或可能有ICollection
,Collection
等等......有些東西不同比比例返回聲明。
調用者不應該從IEnumerable轉換爲List。它返回接口的原因是因爲如果存在底層列表,可超集,簡單數組或甚至是通過yield return返回的列表,應該沒有關係。 – aqwert 2012-04-16 22:29:48
這兩個建議的模式更接近於彼此的模式,而不是這個問題給他們,我想,儘管它們都是密切相關的。 – 2012-04-16 22:54:37
@ChrisCharabaruk我同意這個問題不是重複的,我已經重寫了它,希望更好地傳達我認爲獨特的東西。我也投票重新提出了這個問題。 – DavidRR 2015-12-03 15:57:41