2009-01-21 16 views
14

मुझे एक OR mapper (iBatis.Net) मिला है जो एक आईएलआईस्ट देता है।एक IList <T> क्रमबद्ध करने के लिए कैसे?

// IList<T> QueryForList<T>(string statementName, object parameterObject); 
var data = mapper.QueryForList<Something>(statement, parameters); 

मैं इसे किसी वेब सेवा में उपयोग करने का प्रयास कर रहा हूं जो डेटा 1: 1 वापस करना चाहता है। बेशक मैं एक वेबमाइंड में IList वापस नहीं कर सकता, क्योंकि यह एक इंटरफ़ेस है और इसलिए serializable नहीं है।

मैंने पाया कि मैपर वास्तव में एक सूची लौट रहा है। लेकिन मुझे इसे सूची में डालने से डर है क्योंकि निश्चित रूप से मैपर आंतरिक कार्यकलाप भविष्य के संस्करणों में बदल सकते हैं (और यह सिर्फ गंदा लगता है)।

तो मैं ऐसा करना चाहिए ...

a) return new List<Something>(data); 

b) return (List<Something>)data; 

c) // your solution here 

धन्यवाद एक बहुत!

उत्तर

16

यदि यह वास्तव में एक List<T> है, लेकिन आप परिवर्तन के खिलाफ की रक्षा करना चाहते हैं और यह अभी भी काम करते हैं , तो सबसे अधिक प्रदर्शन करने वाला समाधान इसे सूची में डालने का प्रयास करेगा, और यदि यह विफल हो जाता है तो इसकी सामग्री से एक नई सूची बनाएं, उदाहरण के लिए

var data = mapper.QueryForList<T>(statement, parameters); 
var list = data as List<T> ?? new List<T>(data); 

हालांकि, आप उल्लेख करते हैं कि आप एक इंटरफ़ेस वापस नहीं कर सकते क्योंकि यह एक वेब सेवा है। यह एएसएमएक्स और XmlSerializer वर्ग के साथ सच हो सकता है, लेकिन यदि आप डब्ल्यूसीएफ का उपयोग करके वेब सेवा बनाते हैं और DataContractSerializer का उपयोग करते हैं तो यह खुशी से संग्रह इंटरफेस को क्रमबद्ध करेगा (दोनों इनपुट से इनपुट और आउटपुट के रूप में)। उस प्रकार का परिवर्तन कुछ हद तक बड़ा हो सकता है जो आप ढूंढ रहे हैं!

+2

वाह .. वह कुल। मुझे नहीं पता था कि आप डब्ल्यूसीएफ के साथ सह कर सकते हैं। रॉक ऑन! –

+0

धन्यवाद! इस परियोजना के लिए मैं डब्ल्यूसीएफ पर नहीं जाऊंगा लेकिन भविष्य के संदर्भ के लिए जानना अच्छा है। इसके अलावा मैंने अभी पहचाना है: मैं वास्तव में प्यार करता हूँ ?? वाक्य - विन्यास ;-) – Hinek

0

मुझे नहीं लगता कि आपको सी की आवश्यकता है)। यह समाधान का उपयोग करने के लिए बहुत सुरक्षित होना चाहिए ए)।

यह समाधान IBatis.net के सार्वजनिक एपीआई पर निर्भर करता है। अच्छा एपीआई अपने सार्वजनिक एपीआई को तब तक नहीं बदलता जब तक कि यह वास्तव में एक मिशन की गंभीर समस्या का एकमात्र समाधान नहीं है

आशा है कि इससे मदद मिलती है।

+1

तथ्य यह है कि आईएलआईस्ट लौटा एक सूची है सार्वजनिक एपीआई का हिस्सा नहीं है; इंटरफेस का उपयोग करने का यह सब बिंदु है। –

+0

मैंने जो कहा वह नहीं। वापस लौटने से जनता एपीआई – norbertB

+0

नॉरबर्टबी, हां, समाधान ए) का हिस्सा सुरक्षित है, लेकिन यदि आईएलआईस्ट में कई तत्व हैं तो यह धीमा हो जाएगा ... बी) सबसे तेज़ होना चाहिए लेकिन सुरक्षित नहीं है, इसलिए मेरा प्रश्न एक समाधान सी)। – Hinek

2

तुम क्यों क्रमानुसार चाहिए IList :) बस अपने खुद के संग्रह के लिए एक स्रोत के रूप में उपयोग करें और यह क्रमानुसार:

var data = mapper.QueryForList<T>(statement, parameters); 
var yourList = new List<T>(data); 
//Serialize yourList here)) 
+2

क्योंकि यदि IList पहले से ही एक सूची है, तो आइटम को नई सूची में पंप करने के बजाय इसका उपयोग करना तेज़ है। – Hinek

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