मैं जेनेरिक प्रकारों के मूल्यों की तुलना कैसे करूं?
मैंने इसे एक न्यूनतम नमूने में घटा दिया है:
public class Foo<T> where T : IComparable
{
private T _minimumValue = default(T);
public bool IsInRange(T value)
{
return (value >= _minimumValue); // <-- Error here
}
}
त्रुटि है:
ऑपरेटर '> =' को 'T' और 'T' प्रकार के ऑपरेंड पर लागू नहीं किया जा सकता है।
पृथ्वी पर क्या!? T
पहले से ही करने के लिए विवश किया जाता है IComparable
, और तब भी जब यह मूल्य प्रकार (करने के लिए बाधित where T: struct
), हम अभी भी ऑपरेटरों के किसी भी लागू नहीं कर सकते <
, >
, <=
, >=
, ==
या !=
। (मुझे पता है कि इसमें शामिल वर्कअराउंड Equals()
मौजूद हैं ==
और !=
, लेकिन यह रिलेशनल ऑपरेटरों के लिए मदद नहीं करता है)।
तो, दो सवाल:
- हम इस अजीब व्यवहार का निरीक्षण क्यों करते हैं? हमें जेनेरिक प्रकारों के मूल्यों की तुलना करने से क्या है ज्ञात हैं
IComparable
? क्या यह किसी तरह से सामान्य बाधाओं के पूरे उद्देश्य को नहीं हराता है? - मैं इसे कैसे हल करूं, या कम से कम इसके आसपास काम करूं?
(मुझे पता है कि पहले से ही इस सरल समस्या से संबंधित कुछ मुट्ठी भर सवाल हैं - लेकिन कोई भी सूत्र इतना विस्तृत या व्यावहारिक जवाब नहीं देता है, इसलिए यहाँ है।)