Generics ve IEnumerable abit ile uğraşmaktayım, ama sıkışıp kaldım. İşte ben yapmaya çalışıyorum budur: - (?) Ben herhangi bir koleksiyon türü döndüren bir yöntem olmasını istiyorsanız IEnumerable uygular: -genel bir IEnumerable döndürüyor <T>
ayrıca (şimdiye örn Liste, Stack, Kuyruk, ...), Herhangi bir veri türü için herhangi bir koleksiyon türünü iade edebilmek istiyorum. yüzden bu yöntem bu ben şimdiye kadar denedim budur vs vs
public IEnumerable<T> returnSomething()
{
Stack<int> stackOfInts = new Stack<int>();
List<string> listOfStrings = new List<string>();
return stackOfInts;
}
... Bir List<double>
yanı sıra bir Stack<int>
yanı sıra List<string>,
dönmek isterler. Bu ancak ben bu hatayı alıyorum, çalışmaz:
Cannot implicitly convert type 'System.Collections.Generic.Stack<int>' to 'System.Collections.Generic.IEnumerable<T>'. An explicit conversion exists (are you missing a cast?)
ancak ben IEnumerable<int>
için yöntem imzası IEnumerable<T>
değiştirirseniz, ben int türünde herhangi bir koleksiyonu döndürebilir. Ancak bu, artık ListOfStrings
'u iade edemem anlamına geliyor.
Sen yöntemine bir generic type parameter eklemeniz gerekir herhangi bir öneri veya fikir :)
sayesinde, bu gerçekten de çalışır, ancak şimdi eklemek görünmektedir olamaz stack..stackOfInts.Push (3) için bir şey; Bunu denerseniz, diyor ki: "En iyi aşırı yüklenmiş eşleşme .. bazı geçersiz argümanlar var". herhangi bir fikir? – Thousand
@JaneDoe: Yalnızca 'Yığın' için 'T's ekleyebilir. 3 mutlaka bir "T" değil. Bir [genel tür kısıtlamasını] ekleyin sürece (http://msdn.microsoft.com/en-us/library/d5x73970.aspx) Bir 't' nedir hiçbir fikrim yok, bu yüzden bile bir inşa edemez - Bunu yapmak için bir 'new()' kısıtlaması gerekir. Ne yapmaya çalışıyorsun ve neden buna ihtiyacın var? –
Özellikle bir şey için buna ihtiyacım yok, sadece bir şeyler deniyorum. Ama şimdi anladım, teşekkürler. pencereden dışarı tür güvenliği atmak için gidiyoruz – Thousand