2009-05-15 7 views
14

ठीक है मैं हार मानता हूं, आप इसे एक पंक्ति में कैसे करते हैं?ऑब्जेक्ट [] से सूची <string> सी # 3.0 की एक पंक्ति में कैसे परिवर्तित करें?

var list = values.Cast<string>().ToList(); 

तुम कुछ भी नहीं जा रहे हैं:

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    //List<string> fields = values.ToList<string>(); 
    //List<string> fields = values as List<string>; 
    //List<string> fields = (List<string>)values; 

    List<string> fields = new List<string>(); 
    foreach (object value in values) 
    { 
     fields.Add(value.ToString()); 
    } 

    //process the fields here knowning they are strings 
    ... 
} 
+2

तकनीकी रूप से यह सी # 3.0 है, जिसे वीएस -2008 में .NET फ्रेमवर्क 2.0, 3.0, या 3.5 को लक्षित करने के लिए उपयोग किया जा सकता है। उलझन में, मुझे पता है :) – Lucas

+0

सही, धन्यवाद –

उत्तर

45

क्या आप LINQ के साथ सी # 3.0 का उपयोग कर रहे हैं? नहीं संबंध में एक एक लाइनर सूची में जबकि <> घोषणा

List<string> fields = values.Select(i => i.ToString()).ToList(); 
+4

मुझे कहीं भी नहीं दिखाई देता है कि ऑब्जेक्ट सरणी वास्तव में तारों की एक सरणी थी। यह उत्तर सही है क्योंकि यानी डुप्लिकेट * बिल्कुल * ओपी ने एक-लाइनर में क्या पोस्ट किया था। –

+1

@ एंड्रयू: हाँ, अच्छा बिंदु। मैं स्पष्ट रूप से प्रश्न को बहुत जल्दी पढ़ता हूं। कैविट ने अब मेरी पोस्ट में उल्लेख किया है। – Noldorin

+0

जैसा आपने सही ढंग से संदर्भ से लिया है, ऑब्जेक्ट्स एक्सएएमएल से आ रहे हैं और सैद्धांतिक रूप से किसी भी प्रकार का हो सकता है, इसलिए जब मैं एक पूर्णांक भेजता हूं, तो यह उत्तर सही ढंग से एक स्ट्रिंग में परिवर्तित हो जाता है, सही –

16

आप LINQ (.NET 3.5 में) और सी # 3.0 (विस्तार के तरीकों के लिए) उपलब्ध है, तो वहाँ काफी एक अच्छा एक लाइनर है बहुत कम जो आपने .NET 2.0/C# 2.0 के लिए पोस्ट किया है।

चेतावनी: मैं सिर्फ महसूस किया कि अपने object[] प्रकार string की जरूरी नहीं है। यदि वास्तव में यह मामला है, तो मैट हैमिल्टन की विधि के साथ जाएं, जो नौकरी अच्छी तरह से करता है। यदि आपकी सरणी का तत्व string प्रकार के रूप में है, तो मेरी विधि निश्चित रूप से काम करेगी।

+2

महान उत्तर - एक linq चयन से कहीं ज्यादा सरल है। –

+0

ध्यान दें कि यदि कोई मान स्ट्रिंग नहीं है तो यह असफल हो जाएगा। –

+0

@mausch: हाँ, मैं सिर्फ चेतावनी जोड़ने के लिए जवाब संपादित करूँगा। – Noldorin

2

, Linq की आवश्यकता के बिना आप एक ही प्रभाव देता है: यह बहुत आसान तो है।

List<string> list = new List<string>(); 
Array.ForEach(values, value => list.Add(value.ToString())); 
4

एक और संस्करण है कि सही हो सकता है:

List<string> list = values.OfType<string>().ToList(); 

यह या तो एक अपवाद फेंकने या उन सब को परिवर्तित करने के लिए प्रयास करने का मूल सूची में किसी भी ऑब्जेक्ट string ऑब्जेक्ट नहीं है को फ़िल्टर, बजाय होगा तारों में

+0

ओएफटी टाइप बहुत दिलचस्प है, इसे याद रखेगा, लेकिन इस संदर्भ में, मुझे तीन मानों को प्रदर्शित करने की आवश्यकता है जो वे हैं (स्ट्रिंग, पूर्णांक, आदि) –

9

सी # 2.0:

List<string> stringList = new List<string>(Array.ConvertAll<object,string>(values, new Converter<object,string>(Convert.ToString))); 
3
Array.ConvertAll(inputArray, p => p.ToString()) 

यह string की सरणी के लिए object प्रकार की एक सरणी बदल देता है। आप लैम्ब्डा अभिव्यक्ति को बदलकर अन्य प्रकार के सरणी में परिवर्तित कर सकते हैं।

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