Cân nhắc this mã:Tại sao là Array.IndexOf không kiểm tra cho IEquatable như Danh sách <T> hiện?
public static void Main()
{
var item = new Item { Id = 1 };
IList list = new List<Item> { item };
IList array = new[] { item };
var newItem = new Item { Id = 1 };
var lIndex = list.IndexOf(newItem);
var aIndex = array.IndexOf(newItem);
Console.WriteLine(lIndex);
Console.WriteLine(aIndex);
}
public class Item : IEquatable<Item>
{
public int Id { get; set; }
public bool Equals(Item other) => other != null && other.Id == Id;
}
Kết quả:
0
-1
Tại sao các kết quả khác nhau giữa List<T>
và Array
? Tôi đoán đây là do thiết kế, nhưng tại sao?
Nhìn vào mã số List<T>.IndexOf
làm tôi ngạc nhiên hơn nữa, vì nó đang chuyển đến Array.IndexOf
.
Tôi đã viết ít bài đăng về câu hỏi này: http://blog.rogatnev.net/2017/07/1 4/IndexOf-with-IEquatable.html – Backs