Wie erstelle ich einen generischen C # Array Inhalt Drucker, der sowohl Objekte als auch Primitiven akzeptiert?

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

  •  21-08-2019
  •  | 
  •  

Frage

Ich versuche nur, um schnell eine Webservice debuggen, indem Sie den Inhalt eines int und String-Array ausdrucken. Gibt es trotzdem, dies in einem Verfahren zu tun?

Ich habe versucht,

public static string ArrayToString(object[] array)
{
    StringBuilder sb = new StringBuilder();

    foreach (Object item in array)
    {
        sb.Append(item.ToString());
        sb.Append(" ");
    }

    return sb.ToString();
}

Aber diese Drosseln, wenn ich versuche und ihm eine primitive Array senden (int []) aufgrund nicht ein Objekt zu sein.

Welche finde ich seltsam ein int das Verfahren unter Arbeiten Senden

static void PrintObject(object obj)
{
    Console.WriteLine(obj.ToString());
}

Gibt es trotzdem, dies in einem Verfahren zu tun, oder bin ich nur gehen zu müssen, für den Menschen und schaffen zwei separate Methoden?


Natürlich, ob ich überhaupt mit Arrays werden soll, ist fraglich, aber der Web-Service ist bereits vorhanden.

Siehe auch:

War es hilfreich?

Lösung

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

Dann

int[] x = new int[] { 1, 2, 3 };

string[] y = new string[] { "a", "b", "c" };

Console.WriteLine(ArrayToString(x));
Console.WriteLine(ArrayToString(y));

Andere Tipps

Versuchen Sie etwas wie folgt aus:

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

Der Compiler wird die Art der T durch die Art der Liste, die Sie passieren in wie diese glücklich ableiten:

toString(new int[] { 1, 2, 3 });
toString(new String[] { "1", "2", "3" });

Warum haben Sie ein Array? Ihr Code ist abhängig von keinem der spezifischen Eigenschaften eines Arrays und stattdessen sieht nur eine Liste von Objekten. Es scheint, wie IEnumerable eine viel bessere Wahl sein würde und für praktisch jede Sammlung von Objekten erlauben würde,

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

Es gibt ein paar Möglichkeiten, dies zu tun.

Wenn Sie Linq haben, könnten Sie tun

int[] foo = new int[] {1,2,3,4};
ArrayToString(foo.Cast<Object>().ToArray());

und dann senden.

Oder man könnte eine generische Erweiterungsmethode machen

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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top