C #: एकल स्टेटमेंट में एक से अधिक वेरिएबल्स पर समान मान असाइन करें


161

क्या कोई तरीका है (सिर्फ जिज्ञासा से बाहर होने के कारण, क्योंकि मुझे C # में एक ही मान को एक ही स्टेटमेंट में एक से अधिक वेरिएबल्स में एक से अधिक वैल्यू असाइन करने के लिए कई समान-वैल्यू असाइनमेंट आज कई वेरिएबल्स में आए)?

इन पंक्तियों के साथ कुछ (pseudocode):

int num1 = 1;
int num2 = 1;

num1 & num2 = 5;

शायद नहीं, लेकिन मुझे लगा कि यह पूछने के लायक है कि वास्तव में ऐसा ही कुछ संभव है!

जवाबों:


259

यह उतना ही सरल है:

num1 = num2 = 5;

चर के बजाय किसी ऑब्जेक्ट प्रॉपर्टी का उपयोग करते समय, यह जानना दिलचस्प है कि getमध्यवर्ती मूल्य के एक्सेसर को नहीं कहा जाता है। setअसाइनमेंट सीक्वेंस में एक्सेस की गई सभी प्रॉपर्टी के लिए केवल एक्सेसर को इनवाइट किया जाता है।

उदाहरण के लिए एक वर्ग लें जो कंसोल को लिखता है हर बार getऔर setएक्सेसर को लागू किया जाता है।

static void Main(string[] args)
{
    var accessorSource = new AccessorTest(5);
    var accessor1 = new AccessorTest();
    var accessor2 = new AccessorTest();

    accessor1.Value = accessor2.Value = accessorSource.Value;

    Console.ReadLine();
}

public class AccessorTest
{
    public AccessorTest(int value = default(int))
    {
        _Value = value;
    }

    private int _Value;

    public int Value
    {
        get
        {
            Console.WriteLine("AccessorTest.Value.get {0}", _Value);
            return _Value;
        }
        set
        {
            Console.WriteLine("AccessorTest.Value.set {0}", value);
            _Value = value;
        }
    }
}

यह आउटपुट करेगा

AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5

मतलब यह है कि संकलक सभी गुणों को मूल्य प्रदान करेगा और यह हर बार असाइन किए गए मूल्य को फिर से नहीं पढ़ेगा।


36
यह वास्तव में अजीब नहीं है। तर्क निम्नानुसार है: असाइनमेंट ऑपरेशन स्वयं एक मान लौटाता है, जो कि असाइन किया गया मान है। निष्पादन का अनुक्रम है: num1 = (num2 = 5)और पहला असाइनमेंट जो निष्पादित किया गया है ( num2 = 5) बाहरी दुनिया में 5 मान लौटाता है - जो बदले में num1 को सौंपा गया है। यह एड इनफिनिटम ( num0 = num1 = num2 = 5) काम करता है ।
Jpsy

यदि आप इसका परीक्षण करना चाहते हैं, तो प्रयास करें Console.WriteLine(num = 5);। (डिस्क्लेमर: मैं अभी तक नहीं आया हूं)
अर्लेन बीलर

3
प्रश्न: क्या यह बुरा व्यवहार माना जाता है num1 = num2 = 5? यदि अधिक चर शामिल हैं तो क्या यह कोड को अपठनीय बनाता है? अपहृत करने के लिए क्षमा करें, मैं इसके लिए एक नया पोस्ट नहीं बनाना चाहता था।
जॉन्हेलग्लिडिडिसन

कोई सही उत्तर नहीं है। मैं इसे केवल अपने कार्यक्रम में उपयोग करता हूं और मैं इससे बच सकता था।
पियरे-एलेन विगेंट

नीचे कोडिंग स्टाइल मैं तब मान लेता हूं। उत्तर के लिए धन्यवाद।
जॉनहोल्लिगिडिसन

54

यह तुम चाहते हो जाएगा:

int num1, num2;
num1 = num2 = 5;

'num2 = 5' असाइनमेंट असाइन किया गया मान लौटाएगा।

यह आपको पागल चीजें करने की अनुमति देता है, जैसे num1 = (num2 = 5) +3;कि 8 से 1 अंक 1 असाइन करेगा, हालांकि मैं इसे बहुत पठनीय नहीं होने की सिफारिश नहीं करूंगा।


ये अब काम नहीं करता।
औरेलिन बी

33
int num1=5,num2=5

एक ही बयान में चर घोषित करना और असाइन करना।


क्या यह एक एकल कथन या दो कथन हैं?
मेरिन नाकामरी

महान जवाब, लेकिन अजीब लगता है जब "5" एक लंबी स्ट्रिंग स्थिरांक है। string a = "really long string", b = "really long string";
एलेक्स

13

वाक्यविन्यास में कुछ कम लेकिन दूसरों को पहले से ही बता दिया गया है।

int num1, num2 = num1 = 1;

मुझे लगता है कि यह सबसे अच्छा जवाब है क्योंकि एक ही बयान में आरंभीकरण और असाइनमेंट दोनों किया जा सकता है।
सचिन पाराशर

11

इसे इस्तेमाल करे:

num1 = num2 = 5;

ध्यान दें कि यह VB में काम नहीं करेगा।


1
क्या आप जानते हैं कि VB डेवलपर्स के लिए कुछ वैकल्पिक वाक्यविन्यास है, या एकाधिक असाइनमेंट बस VB में उपलब्ध नहीं है?
ckittel

3
@cki: AFAIK, यह समर्थित नहीं है।
SLAKs

@ckittel वीबी में =काम और समानता के लिए दोनों का उपयोग किया जाता है, इसलिए num1 = num2 = 5मतलब है "या नहीं, पाँच के बराबर है की बूलियन परिणाम आवंटित होगा num2चर करने के लिए num1"। क्योंकि =ऑपरेटर के पास इन दो अर्थ हैं, इस सिंटैक्स का प्रतिनिधित्व करने का कोई तरीका नहीं है। आप जो सबसे अच्छा कर सकते हैं, वह एक फ़ंक्शन बना सकता है जो कई मापदंडों के byrefसाथ-साथ एक मान भी लेता है और सभी मापदंडों को उस मान में असाइन करता है।
सेवई


5
int num1, num2, num3;

num1 = num2 = num3 = 5;

Console.WriteLine(num1 + "=" + num2 + "=" + num3);    // 5=5=5




0

यह अब C # में एक बात है:

var (a, b, c) = (1, 2, 3);

उपरोक्त करके, आपने मूल रूप से तीन चर घोषित किए हैं। a = 1, b = 2और c = 3। सभी एक ही लाइन में।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.