मैं जेनेरिक प्रकारों के मूल्यों की तुलना कैसे करूं?
मैंने इसे एक न्यूनतम नमूने में घटा दिया है:
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? क्या यह किसी तरह से सामान्य बाधाओं के पूरे उद्देश्य को नहीं हराता है? - मैं इसे कैसे हल करूं, या कम से कम इसके आसपास काम करूं?
(मुझे पता है कि पहले से ही इस सरल समस्या से संबंधित कुछ मुट्ठी भर सवाल हैं - लेकिन कोई भी सूत्र इतना विस्तृत या व्यावहारिक जवाब नहीं देता है, इसलिए यहाँ है।)