पर विचार करें this कोड:Array.Index क्यों है Iquatable की जांच नहीं कर रहा है जैसे सूची <T> करता है?
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;
}
परिणाम:
0
-1
क्यों परिणाम List<T>
और Array
के बीच अलग हैं? मुझे लगता है कि यह डिजाइन द्वारा है, लेकिन क्यों?
List<T>.IndexOf
के कोड को देखते हुए मुझे और भी आश्चर्य होता है, क्योंकि यह Array.IndexOf
पर पोर्ट कर रहा है।
मैंने इस प्रश्न के बारे में बहुत कम पोस्ट लिखा: http://blog.rogatnev.net/2017/07/1 4/इंडेक्सऑफ-साथ-IEquatable.html – Backs