كيف يمكنني بناء عامة C# array المحتوى الطابعة التي تقبل كل الكائنات و الأوليات?
سؤال
أنا فقط أحاول بسرعة تصحيح ويب عن طريق طباعة محتويات int صفيف سلسلة.هناك على أية حال أن تفعل هذا في الأسلوب ؟
حاولت
public static string ArrayToString(object[] array)
{
StringBuilder sb = new StringBuilder();
foreach (Object item in array)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
ولكن هذه الإختناقات عندما أحاول إرسال هذا primative مجموعة (int[]) بسبب كونها ليست كائن.
الذي أجده غريبا كما يرسل الباحث إلى الأسلوب أدناه يعمل
static void PrintObject(object obj)
{
Console.WriteLine(obj.ToString());
}
هناك على أية حال أن تفعل هذا في أسلوب واحد أو أنا مجرد الذهاب إلى أن الرجل وخلق منفصلين الأساليب ؟
بالطبع ما إذا كان ينبغي استخدام المصفوفات في كل ما هو مشكوك فيه ، ولكن خدمة ويب هو بالفعل في المكان.
انظر أيضا:
المحلول
public static string ArrayToString<T>(T[] array)
{
StringBuilder sb = new StringBuilder();
foreach (T item in array)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
ثم
int[] x = new int[] { 1, 2, 3 };
string[] y = new string[] { "a", "b", "c" };
Console.WriteLine(ArrayToString(x));
Console.WriteLine(ArrayToString(y));
نصائح أخرى
محاولة شيء من هذا القبيل:
static String toString<T>(IEnumerable<T> list)
{
StringBuilder sb = new StringBuilder();
foreach (T item in list)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
مترجم بسعادة نستنتج نوع T
حسب نوع القائمة التي تمر في مثل هذا:
toString(new int[] { 1, 2, 3 });
toString(new String[] { "1", "2", "3" });
لماذا اخترت المصفوفة ؟ الكود يعتمد على شيء من خصائص معينة من مجموعة وبدلا من ذلك يرى مجرد قائمة من الكائنات.يبدو IEnumerable سيكون خيار أفضل بكثير و لن تسمح لأي مجموعة من الكائنات
public static string ArrayToString(IEnumerable source)
{
StringBuilder sb = new StringBuilder();
foreach (Object item in source)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
private string PrintObjects<T>(IEnumerable<T> objs)
{
return string.Join(" ", objs.Select(o => o.ToString()).ToArray());
}
وهناك عدد قليل من الطرق للقيام بذلك.
إذا كان لديك Linq, هل يمكن أن تفعل
int[] foo = new int[] {1,2,3,4};
ArrayToString(foo.Cast<Object>().ToArray());
ومن ثم إرساله.
أو يمكنك أن تجعل امتداد عام طريقة
public static string ToString<T>(this IEnumerable<T> val)
{
StringBuilder sb = new StringBuilder();
foreach(var item in val)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}