2010-07-12 19 views
8

सी # प्रारंभकर्ता में, यदि कोई शर्त गलत है तो मैं कोई संपत्ति सेट नहीं करना चाहता हूं।सी # प्रारंभकर्ता सशर्त असाइनमेंट

कुछ इस तरह:

ServerConnection serverConnection = new ServerConnection() 
{ 
    ServerInstance = server, 
    LoginSecure = windowsAuthentication, 
    if (!windowsAuthentication) 
    { 
     Login = user, 
     Password = password 
    } 
}; 

यह किया जा सकता है? कैसे?

उत्तर

9

आप यह नहीं कर सकते; सी # प्रारंभकर्ता नाम = मूल्य जोड़े की एक सूची हैं। विवरण के लिए यहां देखें: http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx#cs3spec_topic5

आपको if ब्लॉक को निम्न पंक्ति में ले जाने की आवश्यकता होगी।

+3

हाय, डाउनवोट क्यों? क्या यह जानकारी सही नहीं है? –

+0

बेहतर तरीका है, जैसा कि नीचे उल्लिखित @SLaks है –

21

प्रारंभकर्ता में यह संभव नहीं है; आपको if कथन अलग करने की आवश्यकता है।

वैकल्पिक रूप से, आप

ServerConnection serverConnection = new ServerConnection() 
{ 
    ServerInstance = server, 
    LoginSecure = windowsAuthentication, 
    Login = windowsAuthentication ? null : user, 
    Password = windowsAuthentication ? null : password 
}; 

+0

क्यों इस downvoted था कुछ भी नहीं के बजाय निम्न कोड के साथ गलत कर रही है? – SLaks

+0

वह मेरी गलती थी। जब मैंने आपके उत्तर में जो कुछ भी किया था, तो मूल रूप से आपको नीचे गिरा दिया गया था कि इससे पहले कि आप अपने तृतीयक ऑपरेटरों को जोड़ सकें, यह संभव नहीं है। अब यह स्पष्ट रूप से बंद है और मैं वोट रद्द नहीं कर सकता। धन्यवाद सर्वर बारफ! – Randolpho

+1

@ रैंडोल्फो: अब आप इसे रद्द कर सकते हैं। – SLaks

3

नोट (कैसे अपने ServerConnection वर्ग काम करता है पर निर्भर करता है) लिखने में सक्षम हो सकता है: मैं इस दृष्टिकोण की सलाह नहीं देते, लेकिन अगर यह से किया जाना चाहिए एक प्रारंभकर्ता (यानी आप LINQ या किसी अन्य स्थान का उपयोग कर रहे हैं जहां इसे एक कथन होना है), आप इसका उपयोग कर सकते हैं:

ServerConnection serverConnection = new ServerConnection() 
{ 
    ServerInstance = server, 
    LoginSecure = windowsAuthentication, 
    Login = windowsAuthentication ? null : user, 
    Password = windowsAuthentication ? null : password, 
} 
5

मुझे संदेह है कि यह काम करेगा, लेकिन इस तरह तर्क का उपयोग शुरुआती उपयोग करने के उद्देश्य को हरा देता है।

ServerConnection serverConnection = new ServerConnection() 
{ 
    ServerInstance = server, 
    LoginSecure = windowsAuthentication, 
    Login = windowsAuthentication ? null : user, 
    Password = windowsAuthentication ? null :password 
}; 
3

जैसा कि अन्य लोगों ने उल्लेख किया है, यह बिल्कुल प्रारंभकर्ता के भीतर नहीं किया जा सकता है। क्या यह केवल इसे स्थापित करने की बजाय संपत्ति को शून्य करने के लिए स्वीकार्य है? यदि ऐसा है, तो आप उस दृष्टिकोण का उपयोग कर सकते हैं जिसे दूसरों ने इंगित किया है। यह वास्तव में ज्यादा बात नहीं करना चाहिए

ServerConnection serverConnection; 
if (!windowsAuthentication) 
{ 
    serverConection = new ServerConnection() 
    { 
     ServerInstance = server, 
     LoginSecure = windowsAuthentication, 
     Login = user, 
     Password = password 
    }; 
} 
else 
{ 
    serverConection = new ServerConnection() 
    { 
     ServerInstance = server, 
     LoginSecure = windowsAuthentication, 
    }; 
} 

मेरी राय में,: यहाँ पूरा करता है कि आप क्या चाहते हैं के लिए एक विकल्प है और अभी भी प्रारंभकर्ता सिंटैक्स का उपयोग करता। जब तक आप अज्ञात प्रकारों से निपट नहीं रहे हैं, तब तक प्रारंभकर्ता सिंटैक्स सुविधा के लिए बस एक अच्छा है जो कुछ मामलों में आपका कोड अधिक साफ दिख सकता है। मैं कहूंगा, अगर यह पठनीयता को बलिदान देता है तो अपनी सभी संपत्तियों को आरंभ करने के लिए इसका उपयोग करने के अपने रास्ते से बाहर न जाएं।

ServerConnection serverConnection = new ServerConnection() 
{ 
    ServerInstance = server, 
    LoginSecure = windowsAuthentication, 
}; 

if (!windowsAuthentication) 
{ 
    serverConnection.Login = user, 
    serverConnection.Password = password 
} 
0

कैसे इस बारे में:

ServerConnection serverConnection = new ServerConnection(); 

serverConnection.ServerInstance = server; 
serverConnection.LoginSecure = windowsAuthentication; 

if (!windowsAuthentication) 
{ 
    serverConnection.Login = user; 
    serverConnection.Password = password; 
} 
संबंधित मुद्दे