मेरे पास एक सामान्य वर्ग है जो किसी भी प्रकार, आदिम या अन्यथा की अनुमति देना चाहिए। इसके साथ एकमात्र समस्या का उपयोग कर रहा है default(T)
। जब आप किसी मान प्रकार या स्ट्रिंग पर डिफ़ॉल्ट कॉल करते हैं, तो यह इसे एक उचित मान (जैसे कि रिक्त स्ट्रिंग) के लिए प्रारंभ करता है। जब आप default(T)
किसी ऑब्जेक्ट पर कॉल करते हैं, तो यह अशक्त हो जाता है। विभिन्न कारणों से हमें यह सुनिश्चित करने की आवश्यकता है कि यदि यह एक आदिम प्रकार नहीं है, तो हमारे पास प्रकार का डिफ़ॉल्ट उदाहरण होगा, शून्य नहीं । यहाँ प्रयास 1 है:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
समस्या - स्ट्रिंग एक मान प्रकार नहीं है, लेकिन इसमें एक पैरामीटर रहित निर्माता नहीं है। तो, वर्तमान समाधान है:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
लेकिन यह एक कीचड़ की तरह लगता है। क्या स्ट्रिंग केस को संभालने का एक अच्छा तरीका है?