उपाय
आप new Guid()इसके बजाय उपयोग कर सकते हैं
public void Problem(Guid optional = new Guid())
{
// when called without parameters this will be true
var guidIsEmpty = optional == Guid.Empty;
}
आप भी उपयोग कर सकते हैं default(Guid)
default(Guid)यह भी बिल्कुल उसी तरह काम करेगा new Guid()।
क्योंकि गाइड एक वैल्यू टाइप है न कि रेफरेंस टाइप, इसलिए, उदाहरण के लिए default(Guid)बराबर नहीं है null, इसके बजाय, यह डिफॉल्ट कंस्ट्रक्टर को कॉल करने के बराबर है।
जिसका अर्थ है कि यह:
public void Problem(Guid optional = default(Guid))
{
// when called without parameters this will be true
var guidIsEmpty = optional == Guid.Empty;
}
यह मूल उदाहरण के समान ही है।
व्याख्या
Guid.Emptyकाम क्यों नहीं किया?
आप त्रुटि प्राप्त कर रहे हैं इसका कारण Emptyयह है:
public static readonly Guid Empty;
तो, यह एक वैरिएबल है, न कि एक स्थिर (जैसा static readonlyनहीं है const)। कंपाइलर में केवल कंपाइलर-ज्ञात मान हो सकते हैं क्योंकि विधि पैरामीटर डिफ़ॉल्ट मान (रनटाइम-ओनली-ज्ञात नहीं)।
मूल कारण यह है कि उदाहरण के विपरीत, आपके पास कोई constभी नहीं हो सकता है । यदि आप इसे आजमाते हैं, तो यह संकलन नहीं करेगा।structenum
एक बार और कारण यह है कि structएक आदिम प्रकार नहीं है।
.NET में सभी आदिम प्रकारों की सूची के लिए http://msdn.microsoft.com/en-gb/library/system.typecode.aspx
( enumआमतौर पर विरासत में मिला नोट int, जो एक आदिम है) देखें
लेकिन new Guid()एक स्थिर भी नहीं है!
मैं यह नहीं कह रहा हूं कि इसे एक निरंतरता की जरूरत है। इसे कुछ ऐसा चाहिए जो संकलन समय में तय किया जा सके। Emptyएक क्षेत्र है, इसलिए, यह संकलित समय में ज्ञात नहीं है (केवल रन समय के बहुत शुरुआत में)।
डिफ़ॉल्ट पैरामीटर मान को संकलित-समय पर जाना चाहिए, जो एक constमान हो सकता है , या C # सुविधा का उपयोग करके परिभाषित कुछ ऐसा हो सकता है जो संकलन समय पर मूल्य ज्ञात करता है, जैसे ( default(Guid)या new Guid()जो संकलन समय पर संकलित करने का निर्णय लिया गया है structक्योंकि आप structकंस्ट्रक्टर को संशोधित नहीं कर सकते हैं कोड)।
जब आप प्रदान defaultया newआसानी से कर सकते हैं, तो आप एक प्रदान नहीं कर सकते const(क्योंकि यह एक आदिम प्रकार नहीं है या enumजैसा कि ऊपर बताया गया है)। तो, फिर से, यह नहीं कह रहा है कि वैकल्पिक पैरामीटर को स्वयं एक स्थिर, लेकिन संकलक ज्ञात मूल्य की आवश्यकता है।