c# - मैं सी#में एक सामान्य विधि से NULL कैसे वापस कर सकता हूँ?




generics (7)

  1. यदि आपके पास ऑब्जेक्ट है तो टाइपकास्ट की आवश्यकता है

    return (T)(object)(employee);
    
  2. अगर आपको शून्य वापस करने की जरूरत है।

    return default(T);
    

मेरे पास इस (डमी) कोड के साथ एक सामान्य विधि है (हाँ मुझे पता है कि आईलीस्ट भविष्यवाणी करता है, लेकिन मेरा कोड आईएलआईस्ट का उपयोग नहीं कर रहा है लेकिन कुछ अन्य संग्रह, वैसे भी यह सवाल के लिए अप्रासंगिक है ...)

static T FindThing<T>(IList collection, int id) where T : IThing, new()
{
    foreach T thing in collecion
    {
        if (thing.Id == id)
            return thing;
    }
    return null;  // ERROR: Cannot convert null to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead.
}

यह मुझे एक बिल्ड त्रुटि देता है

"नल को टाइप पैरामीटर 'टी' में परिवर्तित नहीं किया जा सकता क्योंकि यह एक मान प्रकार हो सकता है। इसके बजाय 'डिफ़ॉल्ट (टी)' का उपयोग करने पर विचार करें।"

क्या मैं इस त्रुटि से बच सकता हूं?


Nullable Enum वापसी मानों के लिए यहां एक कार्य उदाहरण है:

public static TEnum? ParseOptional<TEnum>(this string value) where TEnum : struct
{
    return value == null ? (TEnum?)null : (TEnum) Enum.Parse(typeof(TEnum), value);
}

आप बस अपनी बाधाओं को समायोजित कर सकते हैं:

where T : class, IDisposable

फिर वापस शून्य की अनुमति है।


आपका दूसरा विकल्प आपकी घोषणा के अंत में इसे जोड़ना होगा:

    where T : class
    where T: IList

इस तरह यह आपको शून्य वापस करने की अनुमति देगा।


त्रुटि की सिफारिश करें ... और या तो उपयोगकर्ता default(T) या new T

यदि आप उस मार्ग पर जाते हैं तो आपको यह सुनिश्चित करने के लिए अपने कोड में तुलना करना होगा कि यह वैध मिलान था।

अन्यथा, संभावित रूप से "मिलान मिला" के लिए आउटपुट पैरामीटर पर विचार करें।


दो विकल्प:

  • वापसी default(T) जिसका अर्थ है कि यदि आप एक संदर्भ प्रकार (या एक शून्य मूल्य प्रकार) है, int के लिए 0, char के लिए '\ 0' है, तो आप null वापस कर देंगे।
  • टी को संदर्भ प्रकार के रूप में प्रतिबंधित करें where T : class बाधा है और फिर सामान्य के रूप में शून्य वापस आती है

return default(T);






generics