यह वाक्य रचना आप प्रश्न में बाहर से पता चला पाने के लिए संभव है, लेकिन आप वहाँ पाने के लिए चालाकी से काफी अच्छी रकम में संलग्न करने के लिए है।
चलिए समस्या को और अधिक ठोस रूप से स्थापित करते हैं। मुझे लगता है कि मुख्य बिंदु, वाक्यविन्यास है। हम इस हैं:
int intValue = GetData();
string stringValue = GetData();
DateTime[] dateTimeArrayValue = GetData();
हालांकि, हम इस काम करने के लिए नहीं करना चाहती:
double doubleValue = GetData();
DateTime? nullableDateTimeValue = GetData();
आदेश यह पूरा करने के लिए, हम GetData()
से वापसी मान में एक मध्यस्थ वस्तु का उपयोग करने के लिए है, जिसकी परिभाषा ऐसा लगता है:
public class Data
{
public int IntData { get; set; }
public string StringData { get; set; }
public DateTime[] DataTimeArrayData { get; set; }
public MultiReturnValueHelper<int, string, DateTime[]> GetData()
{
return new MultiReturnValueHelper<int, string, DateTime[]>(
this.IntData,
this.StringData,
this.DataTimeArrayData);
}
}
आपका कार्यान्वयन, बिल्कुल अलग होगा, लेकिन यह करेगा। अब चलिए MultiReturnValueHelper
परिभाषित करते हैं।
public class MultiReturnValueHelper<T1, T2, T3> : Tuple<T1, T2, T3>
{
internal MultiReturnValueHelper(T1 item1, T2 item2, T3 item3)
: base(item1, item2, item3)
{
}
public static implicit operator T1(MultiReturnValueHelper<T1, T2, T3> source)
{
return source.Item1;
}
public static implicit operator T2(MultiReturnValueHelper<T1, T2, T3> source)
{
return source.Item2;
}
public static implicit operator T3(MultiReturnValueHelper<T1, T2, T3> source)
{
return source.Item3;
}
}
दोहराएँ T1
के लिए इस परिभाषा, T2
, T3
, आदि सामान्य मामले के लिए।
आप रिटर्न वैल्यू हेल्पर को कक्षा या विधि को बहुत करीब से बांध सकते हैं जो आपको लौटाता है, जिससे आप इंडेक्सर्स के लिए इस तरह के प्रभाव को बनाने में सक्षम बना सकते हैं, जहां आप प्रकारों का एक अलग सेट प्राप्त कर सकते हैं और असाइन कर सकते हैं। यही वह जगह है जहां मैंने इसे सबसे उपयोगी पाया है।
data["Hello"] = "World";
data["infamy"] = new DateTime(1941, 12, 7);
data[42] = "Life, the universe, and everything";
इस वाक्य को पूरा करने के सटीक तंत्र पाठक के लिए एक व्यायाम के रूप में छोड़ दिया जाता है:
एक अन्य एप्लिकेशन के पास निम्न की तरह वाक्यविन्यास सक्षम बनाना है।
इस समस्या के लिए अधिक सामान्य उद्देश्य समाधान (जो मुझे लगता है, एक भेदभावपूर्ण संघ की समस्या के समान) के लिए, कृपया my answer to that question देखें।
charlieday, क्या आप कुछ और विवरण प्रदान कर सकते हैं कि आप एक ऐसी विधि क्यों चाहते हैं जो एकाधिक रिटर्न प्रकारों को वापस कर सके? मुझे आश्चर्य है कि सिस्टम नेमस्पेस में कन्वर्ट क्लास का पालन करने के लिए एक अच्छा मॉडल हो सकता है। इसमें विभिन्न रिटर्न प्रकारों के कई रूपांतरण विधियां हैं लेकिन यह विधि के नाम पर रिटर्न प्रकार को एन्कोड करता है। जैसे ToBoolean, ToByte, ToChar, आदि –
कारण यह है कि आपके परिदृश्य में, प्रकार की जानकारी "दोनों तरीकों से बहती जा रही है"। भाषा डिजाइन का एक बुनियादी सिद्धांत यह है कि आप स्वतंत्र रूप से अभिव्यक्ति के प्रत्येक भाग के प्रकार का विश्लेषण करने में सक्षम होना चाहिए। हम स्वतंत्र रूप से कॉल अभिव्यक्ति के प्रकार को निर्धारित करने में सक्षम होना चाहते हैं जो इसे सौंपा जा रहा है। इस नियम का अपवाद लैम्ब्डा अभिव्यक्ति है; लैम्ब्डा अभिव्यक्तियों में प्रकार की जानकारी "प्रवाह दोनों तरीकों" बनाना बहुत मुश्किल था। विवरण के लिए मेरे ब्लॉग में "अज्ञात विधियों बनाम लैम्ब्डा अभिव्यक्ति" देखें। –
आप यहां मेरा उत्तर http: // stackoverflow देख सकते हैं।कॉम/प्रश्न/1366136/ओवरलोडिंग-ऑन-आधार-ऑफ-रिटर्न-टाइप-केवल/14337184 # 14337184 –