Nếu tôi mất một vài quyền tự do với ví dụ của bạn và quây nó ra trong LINQPad, đây là những gì tôi nhận được:
Phương pháp
List<T> GetNumbers<T>(List<T> nums){
return nums.Where(d => d is T).ToList<T>();
}
List<T> GetNumbersOfType<T>(List<T> nums){
return nums.OfType<T>().ToList<T>();
}
IL
GetNumbers:
IL_0000: ldarg.1
IL_0001: ldnull
IL_0002: ldftn 05 00 00 2B
IL_0008: newobj 0A 00 00 0A
IL_000D: call 06 00 00 2B
IL_0012: call 07 00 00 2B
IL_0017: ret
GetNumbersOfType:
IL_0000: ldarg.1
IL_0001: call 08 00 00 2B
IL_0006: call 07 00 00 2B
IL_000B: ret
tôi 'không phải là chuyên gia IL, nhưng nó trông giống như phương pháp GetNumbers
(sử dụngCú pháp) tạo một đối tượng mới mỗi lần qua vòng lặp, và vì vậy có thể tiêu tốn bộ nhớ nhiều hơn một chút so với phương thức GetNumbersOfType
(sử dụng OfType
).
Nguồn
2012-01-26 00:02:50
Sự khác biệt là người đầu tiên sẽ không biên dịch, phải không? – Krizz
Có thể có nghĩa là: 'listOfItems.Where (d => d là T) .Cố()' –
codekaizen
Mã cập nhật của bạn vẫn không biên dịch. Bạn không thể chỉ sử dụng 'IEnumerable' tới 'T' và gán nó cho 'IEnumerable '. –
svick