c# - समत - डिफ़ॉल्ट मान के लिए समानता के लिए परीक्षण करें



समानता का अधिकार pdf (2)

व्हाट अबाउट

object.Equals(value, default(T))

https://src-bin.com

निम्नलिखित संकलन नहीं है:

public void MyMethod<T>(T value)
{
    if (value == default(T))
    {
        // do stuff
    }
}

त्रुटि: Operator '==' cannot be applied to operands of type 'T' and 'T'

मैं value == null उपयोग नहीं कर सकता क्योंकि T एक संरचना हो सकती है।
मैं value.Equals(default(T)) उपयोग नहीं कर सकता। value.Equals(default(T)) क्योंकि value null हो सकता है।
डिफ़ॉल्ट मूल्य के लिए समानता के लिए परीक्षण करने का उचित तरीका क्या है?


Answer #1

struct / Nullable<T> लिए बॉक्सिंग से बचने के लिए, मैं उपयोग करूंगा:

if (EqualityComparer<T>.Default.Equals(value,default(T)))
{
    // do stuff
}

यह किसी भी T का समर्थन करता है जो IEquatable<T> लागू करता है, object.Equals का उपयोग करता है। बैकअप के रूप में उपयोग करता है, और null आदि (और Nullable<T> लिए उठा ऑपरेटरों) को स्वचालित रूप से Nullable<T>

वहाँ भी Comparer<T>.Default जो तुलना परीक्षणों को संभालता है। यह T संभालता है जो IComparable<T> कार्यान्वित करता है, IComparable<T> वापस गिरता है - फिर से null और उठा हुआ ऑपरेटर संभालता है।





equality