System.Collections.IStructuralEquatable
ve System.Collections.IStructuralComparable
eklenmiştir, ancak neden jenerik değiller, IEquatable<T>
ve ve IComparable<T>
?Neden IStructuralEquatable ve IStructuralComparable genel değil? .NET 4'te
cevap
example on MSDN buradaki cevabın bir bölümünü verir; homojen eşitlikten ziyade heterojen eşitlik için yararlı gibi görünmektedir - yani türünde iki nesnenin (/ değerlerin) farklı olarak eşit olarak kabul edilip edilmeyeceğini test etmek için. Bu tür senaryolarda, arama kodunun object
(heterojen veriyi temsil etmek) ile uğraşması son derece muhtemeldir. Ve jenerik yöntemler o zaman iyi oynamıyorlar.
Ancak, diğer nesne tam olarak aynı türde değilse, tüm "Tuple" sınıfları basitçe 'false' döndürür. 'Array' bunu doğru uygular gibi görünüyor ... – thecoop
Array, benim için de aynı şekilde davranıyor. Bu test başarısız: Assert.IsTrue (StructuralComparisons.StructuralEqualityComparer.Equals (yeni [] {5, 10}, yeni [] {5.0, 10.0})); –
C# jenerikler, bir tür parametresi için yapısal gereksinimleri belirtmenize izin vermez. – Ani