दिलचस्प पोस्ट
क्लासपाथ में कहीं से संसाधन लोड करें Vdso और vsyscall क्या हैं? jQuery ईवेंट हैंडलर हमेशा क्रम में निष्पादित होते हैं – इस तरह से कोई रास्ता नहीं है? पेंट कैसे काम करता है? केवल प्रति उपयोगकर्ता एक बार पॉपअप प्रदर्शित करें एक सेटटाइमेट को रीसेट करना विभक्त 1 / n हमेशा 0.0 पर देता है मैं एंड्रॉइड नेविगेशन पट्टी की ऊँचाई और चौड़ाई प्रोग्राम कैसे प्राप्त करूं? मैं PHP के open_basedir प्रतिबंध कैसे प्राप्त कर सकता हूं? छवि क्रॉस ब्राउज़र का मूल आकार निर्धारित करें? पोस्टग्रेज़ पासवर्ड प्रमाणीकरण विफल रहता है एएसपी के लिए jQuery के माध्यम से JSON डेटा पोस्टिंग। नेट MVC 4 नियंत्रक कार्रवाई स्विफ्ट के साथ उप-वर्ग UIApplication AngularJS नियंत्रकों के बीच डेटा साझा करें जब कुंजीपटल मौजूद है, तो UITextField कैसे चलाना है?

विधि से अनाम प्रकार वापस करने का कोई तरीका है?

मुझे पता है कि मैं इस तरह एक विधि नहीं लिख सकता हूं:

public var MyMethod() { return new{ Property1 = "test", Property2="test"}; } 

मैं इसे अन्यथा कर सकता हूं:

 public object MyMethod() { return new{ Property1 = "test", Property2="test"} } 

लेकिन मैं दूसरा विकल्प नहीं करना चाहता क्योंकि, यदि मैं ऐसा करता हूं, तो मुझे प्रतिबिंब का उपयोग करना होगा


मैं ऐसा क्यों करना चाहता हूं:

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

वेब के समाधान से एकत्रित समाधान "विधि से अनाम प्रकार वापस करने का कोई तरीका है?"

इसे एक System.Object रूप में लौटाना। System.Object एक विधि से एक गुमनाम प्रकार को वापस करने का एकमात्र तरीका है। दुर्भाग्य से ऐसा करने का कोई अन्य तरीका नहीं है क्योंकि गुमनाम प्रकार विशेष रूप से इस तरह से उनके उपयोग को रोकने के लिए डिज़ाइन किए गए थे।

कुछ ऐसी चीजें हैं जो आप किसी Object को लौटने के साथ जोड़ सकते हैं, जिससे आप पास मिल सकते हैं। यदि आप इस समाधान में रुचि रखते हैं तो कृपया पढ़ें विधि से अज्ञात प्रकार वापस नहीं कर सकते हैं? वास्तव में? ।

अस्वीकरण: भले ही मैंने जुड़ा लेख एक वैकल्पिक हल दिखाता है, इसका मतलब यह नहीं है कि यह करना एक अच्छा विचार है। मैं दृढ़ता से आपको इस दृष्टिकोण का इस्तेमाल करने से हतोत्साहित करता हूँ जब एक नियमित प्रकार का निर्माण करना सुरक्षित और समझने में आसान होगा

वैकल्पिक रूप से, आप .NET 4.0 और अधिक में Tuple वर्ग का उपयोग कर सकते हैं:

http://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx

 Tuple<string, string> Create() { return Tuple.Create("test1", "test2"); } 

तो आप इस तरह से संपत्तियों का उपयोग कर सकते हैं:

 var result = Create(); result.Item1; result.Item2; 

सबसे आसान उपाय है एक वर्ग बनाने, संपत्ति में मूल्यों को धक्का, और फिर इसे वापस। अगर अनाम प्रकार आपका जीवन कठिन बना रहे हैं, तो आप उन्हें सही ढंग से उपयोग नहीं कर रहे हैं

 public object MyMethod() { return new { Property1 = "test", Property2 = "test" }; } static void Main(..) { dynamic o = MyMethod(); var p1 = o.Property1; var p2 = o.Property2; } 

चेतावनी के बावजूद कि यह एक अच्छा विचार है या नहीं … एक dynamic एक निजी विधि के लिए ठीक काम करता है।

 private dynamic MyMethod() { return new { Property1 = "test", Property2 = "test" } } 

मुझे लगता है कि एंड्रयू हारे सही हैं, आपको बस "ऑब्जेक्ट" वापस करना होगा। संपादकीय टिप्पणी के लिए, मुझे लगता है कि ओ ओ कोड में कच्ची वस्तुओं से निपटना एक "कोड गंध" हो सकता है। ऐसे मामलों में जहां यह करना सही बात है, लेकिन अधिकतर समय, यदि आप इंटरफ़ेस को वापस लौटने के लिए, या किसी प्रकार के आधार वर्ग प्रकार का उपयोग करना बेहतर होगा, यदि आप संबंधित प्रकार वापस लौटना चाहते हैं

नहीं, अनाम रूप उन प्रसंगों के बाहर मौजूद नहीं हो सकते हैं जिसमें वे बनाए गए हैं, और परिणामस्वरूप एक विधि वापसी प्रकार के रूप में उपयोग नहीं किया जा सकता है। आप उदाहरण को एक object रूप में वापस कर सकते हैं, लेकिन इस उद्देश्य के लिए अपने स्वयं के कंटेनर प्रकार को स्पष्ट रूप से बनाने के लिए एक बेहतर विचार है।

नहीं, विधि के बाहर अज्ञात वर्ग के दायरे के विस्तार के लिए कोई समर्थन नहीं है। विधि के बाहर वर्ग सचमुच गुमनाम है, और प्रतिबिंब एकमात्र तरीका है कि इसका सदस्यों तक पहुंच है।

क्षमा करें, आप वास्तव में ऐसा नहीं करना है। आप इसके चारों ओर प्रतिबिंब के साथ हैक कर सकते हैं या आपके लिए प्रकार वापस करने के लिए एक सामान्य सहायक पद्धति बना सकते हैं, लेकिन ऐसा करने से वास्तव में भाषा के खिलाफ काम कर रहा है। बस प्रकार घोषित करें, यह स्पष्ट है कि क्या हो रहा है।