IEnumerable<Book> _Book_IE
List<Book> _Book_List
ฉันจะแปลง_Book_List
เป็นIEnumerable
รูปแบบได้อย่างไร
IEnumerable<Book> _Book_IE
List<Book> _Book_List
ฉันจะแปลง_Book_List
เป็นIEnumerable
รูปแบบได้อย่างไร
คำตอบ:
คุณไม่จำเป็นต้องแปลง List<T>
ใช้IEnumerable<T>
อินเทอร์เฟซเพื่อให้สามารถระบุได้อยู่แล้ว
ซึ่งหมายความว่าการมีสิ่งต่อไปนี้เป็นสิ่งที่ดีอย่างยิ่ง
public IEnumerable<Book> GetBooks()
{
List<Book> books = FetchEmFromSomewhere();
return books;
}
เช่นเดียวกับ:
public void ProcessBooks(IEnumerable<Book> books)
{
// do something with those books
}
ซึ่งสามารถเรียกได้:
List<Book> books = FetchEmFromSomewhere();
ProcessBooks(books);
คุณสามารถใช้วิธีการขยาย AsEnumerable ใน Assembly System.Core และ System.Linq namespace:
List<Book> list = new List<Book>();
return list.AsEnumerable();
ตามที่กล่าวไว้ในลิงก์ MSDN นี้จะเปลี่ยนประเภทของรายการในเวลาคอมไพล์ สิ่งนี้จะให้ประโยชน์แก่คุณในการระบุเฉพาะคอลเลคชันของคุณที่เราต้องการเท่านั้น (ดูตัวอย่าง MSDN สำหรับสิ่งนี้)
ทำไมไม่ใช้ซับเดี่ยว ...
IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>;
เท่าที่ผมรู้ว่าการดำเนินการList<T>
IEnumerable<T>
หมายความว่าคุณไม่ต้องแปลงหรือหล่ออะไรเลย
IEnumerable<IList<obj>>
เป็นIEnumerable<IEnumerable<obj>>
จะทำให้เกิดข้อผิดพลาดของคอมไพเลอร์เนื่องจากตัวที่สองไม่ได้รับมรดกจากตัวแรก
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;
หากเป็นตัวแปรทั่วไป:
_Book_IE = _Book_List;
หากคุณต้องการแปลงเป็นแบบที่ไม่ใช่ทั่วไป:
IEnumerable ie = (IEnumerable)_Book_List;
คุณต้อง
using System.Linq;
เพื่อใช้IEnumerable
ตัวเลือกที่List
ไฟล์.