2010-04-28 19 views
22

का डिफ़ॉल्ट मान सेट करना जब भी मैं एक संसाधन फ़ाइल में कुछ करने के लिए एक वैकल्पिक पैरामीटर का डिफ़ॉल्ट मान सेट करने का प्रयास है, मैं 'के लिएएक सी # वैकल्पिक पैरामीटर

डिफ़ॉल्ट पैरामीटर मान का एक संकलन समय त्रुटि मिलती है संदेश 'एक संकलन समय स्थिर होना चाहिए।

क्या कोई तरीका है कि मैं यह बदल सकता हूं कि संसाधन फाइलें इसे कैसे संभव बनाती हैं?

public void ValidationError(string fieldName, 
          string message = ValidationMessages.ContactNotFound) 

इसमें, ValidationMessages एक संसाधन फ़ाइल है।

+0

@ जोएल: धन्यवाद! फ्लैग-पिकर उस समय थोड़ा सा खराब था और मुझे एहसास नहीं हुआ कि मैंने गुमराह किया था। :-) – Jaxidian

उत्तर

12

नहीं, आप संसाधन को सीधे डिफ़ॉल्ट रूप से काम नहीं कर पाएंगे। आपको जो करना है वह डिफ़ॉल्ट मान को शून्य जैसे सेट पर सेट करता है और उसके बाद संसाधन लुकअप करता है जब पैरामीटर के पास विधि के शरीर में डिफ़ॉल्ट मान होता है।

public void ValidationError(string fieldName, string message = null) 
{ 
    string realMessage = message ?? ValidationMessages.ContactNotFound; 
    ... 
} 
बेशक

, यह केवल काम करता है आप null एक वास्तविक मूल्य के रूप में अनुमति देने के लिए नहीं करना चाहते हैं:

+0

यही वह था जिसे मैं डरता था। मुझे वास्तव में विकास की समय की सुविधा पसंद है, यह बताता है कि स्ट्रिंग क्या होगी: http://jaxidian.org/optparam.jpg मुझे एहसास है कि मैं जो पूछ रहा हूं (संसाधन फ़ाइल संकलित करना) कारण का हिस्सा है यह अस्तित्व में है, लेकिन मैं इसका उपयोग स्थानीयकरण और गतिशील परिवर्तनों के लिए नहीं कर रहा हूं, बल्कि पुन: उपयोग किए गए तारों के लिए एक सामान्य स्टोर के रूप में। – Jaxidian

+0

लेकिन निश्चित रूप से! इस जवाब के लिए Thanx –

+0

लेकिन कुछ डिफ़ॉल्ट मान 'int' की तरह शून्य नहीं हैं। आप इससे कैसे निपटते हैं? –

13

एक विकल्प डिफ़ॉल्ट मान null बनाने के लिए और फिर पॉप्युलेट कि उचित रूप से है।

एक और संभावित विकल्प प्री-बिल्ड चरण होना होगा जिसने संसाधनों के आधार पर const तारों से भरा फ़ाइल बनाई है; फिर आप उन consts का संदर्भ दे सकते हैं। यद्यपि यह काफी अजीब होगा।

public void ValidationError(string fieldName) 
{ 
    ValidationError(fieldName, ValidationMessages.ContactNotFound); 
} 

public void ValidationError(string fieldName, string message) 
{ 
    ... 
} 

इस तरह भी null मामले में message के लिए एक मूल्य है कि के रूप में पारित करने के लिए सक्षम बनाता है:

+0

यही वह था जिसे मैं डरता था। मुझे वास्तव में विकास की समय की सुविधा पसंद है, यह बताता है कि स्ट्रिंग क्या होगी: http://jaxidian.org/optparam.jpg मुझे एहसास है कि मैं जो पूछ रहा हूं (संसाधन फ़ाइल संकलित करना) कारण का हिस्सा है यह अस्तित्व में है, लेकिन मैं इसका उपयोग स्थानीयकरण और गतिशील परिवर्तनों के लिए नहीं कर रहा हूं, बल्कि पुन: उपयोग किए गए तारों के लिए एक सामान्य स्टोर के रूप में। – Jaxidian

11

एक अन्य विकल्प को दो भागों में तो की तरह अपने विधि विभाजित करने के लिए, और एक अधिभार है अन्य फोन है उस पैरामीटर के लिए भी वैध मान।

संबंधित मुद्दे