Tôi đang rối tung với các generics và IEnumerable abit, nhưng tôi bị mắc kẹt. Đây là những gì tôi đang cố gắng làm: Tôi muốn có phương thức trả về bất kỳ loại bộ sưu tập nào - triển khai IEnumerable (?) - (ví dụ: Danh sách, Ngăn xếp, Hàng đợi, ...)trả về một số chung IEnumerable <T>
hơn nữa, tôi muốn có thể trả về bất kỳ loại bộ sưu tập nào, của bất kỳ kiểu dữ liệu nào. vì vậy tôi muốn phương pháp này để có thể trả về một List<string>,
cũng như một Stack<int>
, cũng như một List<double>
... vv vv
public IEnumerable<T> returnSomething()
{
Stack<int> stackOfInts = new Stack<int>();
List<string> listOfStrings = new List<string>();
return stackOfInts;
}
đây là những gì tôi đã cố gắng cho đến nay. tuy nhiên điều này không làm việc, tôi nhận được lỗi này:
Cannot implicitly convert type 'System.Collections.Generic.Stack<int>' to 'System.Collections.Generic.IEnumerable<T>'. An explicit conversion exists (are you missing a cast?)
Tuy nhiên, nếu tôi thay thế IEnumerable<T>
trong chữ ký phương pháp để IEnumerable<int>
, tôi có thể trả lại bất kỳ bộ sưu tập các kiểu int. Điều này tuy nhiên có nghĩa là, bây giờ tôi không thể trả lại ListOfStrings
nữa.
sẽ đánh giá cao bất cứ đề nghị hoặc ý tưởng :)
nhờ, công trình này thực sự, nhưng bây giờ tôi không thể dường như để thêm bất cứ điều gì để stack..stackOfInts.Push (3); nếu tôi thử điều này, nó nói: "trận đấu quá tải tốt nhất .. có một số đối số không hợp lệ". bất kỳ ý tưởng? – Thousand
@JaneDoe: Bạn chỉ có thể thêm 'T' vào một 'Stack'. 3 không nhất thiết phải là 'T'. Trừ khi bạn thêm một [ràng buộc kiểu generic] (http://msdn.microsoft.com/en-us/library/d5x73970.aspx), bạn không biết một 'T' là gì, vì vậy bạn thậm chí không thể xây dựng một - để làm điều đó bạn cần một ràng buộc 'mới()'. Bạn đang cố gắng làm gì và tại sao bạn cần điều này? –
tôi không cần điều này cho bất cứ điều gì đặc biệt, im chỉ cố gắng ra một loạt các điều. Nhưng tôi hiểu rồi, cảm ơn. – Thousand