2010-02-10 17 views
6

किसी ऑब्जेक्ट प्रारंभकर्ता के साथ, क्या वैकल्पिक रूप से संपत्ति की सेटिंग शामिल करना संभव है?ऑब्जेक्ट प्रारंभकर्ता और गतिशील रूप से गुण निर्दिष्ट करना

उदाहरण के लिए:

Request request = new Request 
{ 
    Property1 = something1, 
    if(something) 
     Property2 = someting2,          
    Property3 = something3 
}; 

उत्तर

4

ऐसा नहीं है कि मुझे पता है। यकीन है कि अपने ही एकमात्र विकल्प इस तरह यह करने के लिए है:

Request request = new Request 
{ 
    Property1 = something1, 
    Property3 = something3 
}; 
if(something) 
    request.Property2 = someting2; 

या आप इसे इस तरह कर सकता है वहाँ एक डिफ़ॉल्ट/शून्य मान आप के लिए सेट कर सकते हैं अगर:

Request request = new Request 
{ 
    Property1 = something1, 
    Property2 = something ? someting2 : null, 
    Property3 = something3 
}; 
2

सं वस्तु initialisers सेट बयान के एक गूंगा अनुक्रम में अनुवाद कर रहे हैं।

जाहिर है, आप कुछ समान प्राप्त करने के लिए हैक्स कर सकते हैं, जैसे कि आप डिफ़ॉल्ट मूल्य को जानते हैं (जैसे new Request { Property2 = (something ? something2 : null) }), लेकिन सेटटर अभी भी कॉल करने वाला है - और निश्चित रूप से इसमें अनपेक्षित परिणाम होंगे अगर अनुरोध के कार्यान्वयनकर्ता संपत्ति के डिफ़ॉल्ट मूल्य को बदलने का फैसला करता है। इस तरह की चाल से बचने के लिए सबसे अच्छा है और पुराने प्री-ऑब्जेक्ट-प्रारंभिक तरीके से स्पष्ट सेट स्टेटमेंट लिखकर कोई सशर्त प्रारंभिक कार्य करें।

0

नहीं है, उन के बाद से स्थैतिक कॉल हैं जिन्हें कुछ शर्तों के आधार पर रनटाइम पर हटाया या जोड़ा नहीं जा सकता है।

आप मूल्य परिस्थिति के अनुसार बदल सकते हैं, तो जैसे:

Foo foo = new Foo { One = "", Two = (true ? "" : "bar"), Three = "" }; 
संबंधित मुद्दे