2012-06-22 22 views
7

सब, क्या मैं मानसिक हो गया हूं (यह सवाल नहीं है)। मैं List<object[]>सी # सूची <string[]> सूची <object[]> रूपांतरण

List<string[]> parameters = GetParameters(tmpConn, name); 
List<object[]> objParams = parameters.OfType<object[]>(); 

इस काम नहीं कर रहा करने के लिए List<string[]> परिवर्तित करना चाहते हैं, लेकिन जब तक मैं कुछ भूल गए हैं इस पद्धति का उपयोग एक रूपांतरण (कोई lambdas आवश्यक) संभव हो जाना चाहिए?

आपके समय के लिए धन्यवाद। बस

List<object[]> objParams = parameters.ToList<object[]>(); 

या

List<object[]> objParams = parameters.ConvertAll(s => (object[])s); 
+1

'... ऑफ टाइप ()' –

उत्तर

16

आप की तरह कुछ का उपयोग करना चाहते।

Enuemrable.OfType किसी भी अवैध स्थान को फ़िल्टर करता है। आप इसके बजाय Enumerable.Cast पर विचार करना चाहेंगे, अगर आप कोई गलती करते हैं तो फेंक देगा। यदि string[]object[] से प्राप्त नहीं होता है (मुझे ईमानदारी से याद नहीं है), तो आपको रूपांतरण प्रदान करने के लिए Enumerable.Select पर कॉल करने की आवश्यकता हो सकती है।

आपको निश्चित रूप से कहीं भी एक संख्यात्मक। लिस्ट कॉल की आवश्यकता है।

+1

तो मूर्ख। धन्यवाद दोस्त, एक लंबे शुक्रवार ... – MoonKnight

3

OfType<string[]> रिटर्न एक IEnumerable<string[]>, नहीं एक List<object[]>,

List<object[]> objParams = parameters.OfType<object[]>().ToList(); 

या में सी # 4.0:

0

यह, इस तरह से

List<string[]> sList = new List<string[]> {new []{"A", "B"}}; 
List<object[]> oList = sList.Cast<object[]>().ToList(); 
2
सरणी सहप्रसरण की वजह से

कर .NET 4.0 में के बारे में, तुम बस कैसे कर सकते:

// Works because: 
// a) In .NET, a string[] is an object[] 
// b) In .NET 4.0, an IEnumerable<Derived> is an IEnumerable<Base>    
var result = parameters.ToList<object[]>(); 

लेकिन ध्यान दें कि आप उत्परिवर्तित करने में सक्षम नहीं होगा तारों के अलावा कुछ भी के साथ उन सरणी (क्योंकि सरणी covariance वास्तव में सुरक्षित नहीं है)।

आप वास्तव में लचीला लिखने योग्य वस्तु सरणियों चाहते हैं, आप कर सकते हैं:

var result = parameters.Select(array => array.ToArray<object>()) 
         .ToList(); 

(या) काफी

var result = parameters.ConvertAll(array => array.ToArray<object>()); 

तो फिर तुम के उदाहरण के साथ प्रत्येक भीतरी सरणी के तत्वों की जगह सकता है किसी भी कृपया टाइप करें

+0

इसके लिए धन्यवाद। हालांकि, मेरे मूल टाइप किए गए प्रश्न के बावजूद। उपर्युक्त में से पहला है जो मैंने कोशिश की लेकिन बिना 'var' के, क्यों इस मामले में' var' महत्वपूर्ण अंतर बनाता है - मुझे लगता है कि जवाब यह है कि यह मेरे लिए 'toList()' कास्ट कर रहा है। वास्तव में Awsome ... आपके समय के लिए धन्यवाद। – MoonKnight

+0

'var' की आवश्यकता नहीं है, आप 'सूची परिणाम = पैरामीटर कर सकते हैं। सूची ();', इसलिए मुझे यकीन नहीं है कि आपका मूल प्रयास गलत कहां गया था। – Ani

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