سؤال

لدي نظام. هل هناك طريقة أفضل للقيام بذلك من مجرد حلقة من خلال الصفيف ، والاتصال بـ Tostring على كل عنصر ، والتوفير لسلسلة []؟ المشكلة هي أنني لا أعرف بالضرورة نوع العناصر حتى وقت التشغيل.

هل كانت مفيدة؟

المحلول

ماذا عن استخدام LINQ؟

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

نصائح أخرى

هل هو عادل Array؟ أم أنها (على سبيل المثال) object[]؟ لو ذلك:

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

ملاحظة من أي مجموعة من الأنواع المرجعية يجب أن تكون قابلة للتشكيل object[] (حتى لو كان في الواقع ، على سبيل المثال ، Foo[]) ، لكن أنواع القيمة (مثل int[]) لا يمكن أن يكون. لذلك يمكنك المحاولة:

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

ولكن إذا كان الأمر مثل int[], ، عليك أن تحلق يدويًا.

يمكنك استخدام Array.ConvertAll, ، مثله:

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

النهج البسيط والأساسي ؛

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));

من المحتمل أن يكون هذا مضغوطًا ، لكنه يدور حول الحد من عدم القدرة على استخدام CAST <> أو LINQ SELECT على نظام كائن.

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));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top