كيف يمكنني بناء عامة C# array المحتوى الطابعة التي تقبل كل الكائنات و الأوليات?

StackOverflow https://stackoverflow.com/questions/857976

  •  21-08-2019
  •  | 
  •  

سؤال

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