Operatörleri kısıtlayamazsınız, ancak arabirimleri kısıtlayabilirsiniz. Bu nedenle, >=, <=, ==
kullanmak isteyen dışarı, ama CompareTo, Equals
kullanabilirsiniz.
where T : IComparable<T>
Interface documentation
Bu arayüzü (vs, daha az, daha fazla) ilişkisel sipariş için yararlıdır CompareTo
yöntemini getirmektedir. Primitifler ve dizeler bunu zaten uygular, ancak bunu kendi özel türleriniz için uygulamanız gerekir. Sen object
sanal yöntem olarak varsayılan olsun bu
void SomeMethod<T>(T alpha, T beta) where T : IComparable<T>
{
if (alpha.CompareTo(beta) > 0)
{
// alpha is greater than beta, replaces alpha > beta
}
else if (alpha.CompareTo(beta) < 0)
{
// alpha is less than beta, replaces alpha < beta
}
else
{
// CompareTo returns 0, alpha equals beta
}
}
Equals
gibi kullanmak. Referans yöntemiyle eşitlikten başka bir şey kullanmak istiyorsanız, bu yöntemi kendi özel türlerinizde geçersiz kılmak istersiniz. (Aynı zamanda kuvvetli aynı anda GetHashCode
geçersiz kılmak için önerilir.)
ıcomparable Eşittir yöntemi yoktur ... şüphe IEquatable –
@nathan şu, sen Equals' sanal yöntemdir 'doğru, ama varsayılan olarak nesneler üzerinde, bu yüzden cevapta arayüzden bahsetmedim. Açıklık için güncellenir. –
Öyle yaptım ama şimdi hata 'operatörü
rohit89