2013-07-29 3 views
7

पर्ल ऐसा करने की क्षमता है:कैसे एक बयान में चरों की सूची के लिए आवंटित करने के लिए

my ($a,$b,$c,$d) = foo(); 

जहां foo रिटर्न 4 चर, के रूप में यह एक समय में एक बताए करने का विरोध किया। क्या सी # में कुछ समान है?

+9

इसके लिए कक्षा क्यों नहीं बनाते? –

+0

AFAIK संख्या, लेकिन @ 491243 के रूप में आप कक्षा – wudzik

+2

का उपयोग कर सकते हैं बस दिलचस्प - जब यह सुविधा उपयोगी हो सकती है? –

उत्तर

8

नहीं, मूल रूप से। विकल्प:

object[] values = foo(); 
int a = (int)values[0]; 
string b = (string)values[1]; 
// etc 

या:

var result = foo(); 
// then access result.Something, result.SomethingElse etc 

या:

int a; 
string b; 
float c; // using different types to show worst case 
var d = foo(out a, out b, out c); // THIS WILL CONFUSE PEOPLE and is not a 
            // recommendation 
+0

@lazyberezovsky आखिरकार इन सभी चीजों में एक फ़ंक्शन से आउटबाउंड एकाधिक मान व्यक्त करने और कॉलर पर स्थानीय लोगों को असाइन करने के तरीके हैं; * के लिए * तंत्र * (सूचियां, आदि) कार्यान्वयन विवरण –

+0

बहुत धन्यवाद है! – user2521358

+3

यदि आप खराब विकल्प की गणना कर रहे हैं, तो मुझे लगता है कि आप 'टुपल '':) भी शामिल कर सकते हैं। जाहिर है, सी # उपयोगकर्ताओं को दूसरे विकल्प पर इंगित करता है - एक सार्थक वर्ग लौटाता है। – Kobi

1

कार्यों आप लौटना चाहिए या तो 1 वस्तु या void लिए। लेकिन आप इस समस्या से कई तरीकों से संपर्क कर सकते हैं।

  1. आप इस तरह के एक struct या एक class कि a,b,c,d होते हैं और लौटने कि आपके समारोह के रूप में उदाहरण के लिए के रूप में एक डेटा संरचना बना सकते हैं data foo() डेटा में ए, बी, सी, डी
  2. होगा आप अपने फ़ंक्शन के पैरामीटर में out कीवर्ड का उपयोग कर सकते हैं उदा। foo (बाहर, बाहर बी, बाहर सी, बाहर डी), लेकिन आपके परिवर्तनीय इनपुट शुरू करने की आवश्यकता होगी। यहां अधिक जानकारी। http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx
  3. देखें आप ref का भी उपयोग कर सकते हैं जो कि समान है। देखें http://msdn.microsoft.com/en-US/library/14akc2c7(v=vs.80).aspx
  4. या अगर ए, बी, सी, डी सभी एक ही प्रकार के होते हैं तो आप उन्हें एक arrray या एक list किसी अन्य सदस्य के रूप में के रूप में एक संग्रह के रूप में लौट सकते हैं ने कहा है

भी निर्भर करता है याद जिस प्रकार आप स्ट्रैट बनाम ऑब्जेक्ट्स पास कर रहे हैं उस प्रकार पर Value या Reference के रूप में पारित किया जा सकता है। http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx

+0

विज्ञापन 4. ऐरे, सूची या (अधिमानतः) एक 'आईनेमरेबल' –

2

Tuple इसके लिए एक उपयोगी निर्माण हो सकता है।

public Tuple<int, string, double> Foo() { ... } 

तो फिर तुम कर सकते हैं:

var result = Foo(); 

int a = result.Item1; 
string b = result.Item2; 
double c = result.Item3; 

यह सी # पर कार्यात्मक प्रोग्रामिंग शैलियों के बढ़ते प्रभाव की विरासत है: टपल कई कार्यात्मक भाषाओं में एक मौलिक निर्माण है, और बहुत में सहायता करता है उनके स्थैतिक टाइपिंग।

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