2009-12-28 9 views
39

मेरे पास एक सिस्टम है। ऐरे जिसे मुझे स्ट्रिंग में परिवर्तित करने की आवश्यकता है []। क्या सरणी के माध्यम से लूपिंग करने, प्रत्येक तत्व पर ToString को कॉल करने और स्ट्रिंग को सहेजने के बजाय ऐसा करने का कोई बेहतर तरीका है []? समस्या यह है कि मैं रनटाइम तक तत्वों के प्रकार को जरूरी नहीं जानता हूं।सिस्टम कनवर्ट करें। स्ट्रिंग करने के लिए ऐरे []

+0

, आप अनिवार्य रूप से सरणी पर पुनरावृति करने की जरूरत है (LINQ या जो कुछ भी विधि के साथ यह हो)। – GrayWizardx

+0

(टिप्पणी का उत्तर दिया गया) –

उत्तर

61

LINQ का उपयोग करने के बारे में कैसे?

string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray(); 
+0

मुझे लगता है कि मेरे ऐरे से चयन विधि नहीं है। क्या मैं कुछ भूल रहा हूँ? – KrisTrip

+3

हां, अपने 'उपयोग' –

+0

पर 'System.Linq' जोड़ें' सुनिश्चित करें कि आप C# 3 का उपयोग कर रहे हैं, और आपने सिस्टम.लिंक नामस्थान शामिल किया है। – LBushkin

13

क्या यह सिर्फ Array है? या यह है (उदाहरण के लिए) object[]? यदि ऐसा है तो:

object[] arr = ... 
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString); 

नोट से संदर्भ-प्रकारों में से किसी 1-डी सरणी object[] को castable होना चाहिए (भले ही यह वास्तव में है, उदाहरण के लिए, Foo[]), लेकिन मूल्य-प्रकार (जैसे int[] के रूप में) कर सकते हैं ' टी हो तो अगर आप की कोशिश कर सकते:

Array a = ... 
object[] arr = (object[]) a; 
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString); 

लेकिन अगर यह int[] की तरह कुछ है, तो आप पाश करने के लिए मैन्युअल रूप से करना होगा।

+0

यह सिर्फ ऐरे है और इसमें वास्तव में मूल्य प्रकार (शायद होगा) शामिल हो सकते हैं। – KrisTrip

+0

@ क्रिसट्रिप - * परिवर्तनीय * "केवल ऐरे" हो सकता है, लेकिन ऑब्जेक्ट नहीं होगा; यह एक निश्चित सरणी प्रकार है। "मूल्य प्रकार" युक्त (** ऑब्जेक्ट [] 'कर सकते हैं) के बीच एक ** बड़ा ** अंतर भी है, और "एक मान-प्रकार सरणी है" (जैसे 'int []')।इस मामले में यह अंतर मायने रखता है। क्या आप स्पष्ट कर सकते हैं कि ** बिल्कुल ** 'अरे' उदाहरण क्या है? –

+0

मुझे ToArray विधि का उपयोग करके ऐरे मिलता है। मैं रनटाइम तक नहीं जानता लेकिन यह एक int [], डबल [], फ्लोट [], स्ट्रिंग [], या कॉम्प्लेक्स [] (उपयोगकर्ता परिभाषित ऑब्जेक्ट) – KrisTrip

4

आप Array.ConvertAll, इस तरह उपयोग कर सकते हैं:

string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString); 
0

यह शायद संकुचित किया जा सकता है, लेकिन यह सक्षम नहीं होने की सीमा के आस-हो जाता है कास्ट का उपयोग करने के लिए <> या के एक System.Array प्रकार पर Linq का चयन करें वस्तु।

Type myType = MethodToGetMyEnumType(); 
Array enumValuesArray = Enum.GetValues(myType); 
object[] objectValues new object[enumValuesArray.Length]; 
Array.Copy(enumValuesArray, objectValues, enumValuesArray.Length); 

var correctTypeIEnumerable = objectValues.Select(x => Convert.ChangeType(x, t)); 
+0

अभी भी जेनेरिक वस्तुओं की एक सरणी है। –

0

सरल और मूल दृष्टिकोण;

Array personNames = Array.CreateInstance(typeof (string), 3); 
// or Array personNames = new string[3]; 
personNames.SetValue("Ally", 0); 
personNames.SetValue("Eloise", 1); 
personNames.SetValue("John", 2); 

string[] names = (string[]) personNames; 
// or string[] names = personNames as string[] 

foreach (string name in names) 
    Console.WriteLine(name); 

या सिर्फ एक अन्य दृष्टिकोण: तुम बहुत personNames.ToArray उपयोग कर सकते हैं: क्रम जब तक प्रकार बिना जाने

string[] names = (string[]) personNames.ToArray(typeof (string)); 
संबंधित मुद्दे