تحويل القائمة<int> إلى القائمة<string> في .NET 2.0
سؤال
هل يمكنك إلقاء أ List<int>
ل List<string>
بطريقة ما؟
أعلم أنه يمكنني تكرار الأمر و .ToString()، لكن طاقم الممثلين سيكون رائعًا.
أنا في C# 2.0 (لذلك لا لينك).
المحلول
.NET 2.0 لديه ConvertAll
الطريقة التي يمكنك من خلالها تمرير وظيفة المحول:
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });
نصائح أخرى
تم التحديث لعام 2010
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
هل C#2.0 قادر على القيام بذلك؟ List<T>.Convert
؟إذا كان الأمر كذلك، فأعتقد أن أفضل تخمين لك هو استخدام ذلك مع مندوب:
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });
شيء على هذا المنوال.
قم بالتصويت لصالح إجابة جلين، والتي ربما تكون هي الرمز الصحيح؛-)
لن تكون قادرًا على إرسالها مباشرةً نظرًا لعدم وجود تحويل صريح أو ضمني من int إلى السلسلة يملك لتكون طريقة تتضمن .ToString() مثل: -
foreach (int i in intList) stringList.Add(i.ToString());
يحرر - أو كما أشار الآخرون ببراعة، استخدم intList.ConvertAll(delegate(int i) { return i.ToString();})؛ ولكن من الواضح أنه لا يزال يتعين عليك استخدام .ToString() وهو تحويل وليس تحويلًا.
يمكنك استخدام:
List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();
لديك لبناء قائمة جديدة.تمثيلات البت الأساسية لـ List<int>
و List<string>
غير متوافقة تمامًا - على نظام 64 بت، على سبيل المثال، الأعضاء الأفراد ليسوا حتى بنفس الحجم.
من الممكن نظريًا علاج أ List<string>
ك List<object>
- ينقلك هذا إلى عوالم مثيرة من التغاير والتناقض، وهو غير مدعوم حاليًا بواسطة C# أو VB.NET.
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
استبدل نتيجة المعلمات وlistOfInt بالمعلمات الخاصة بك