25 Stimmen

Den Inhalt eines Arrays ausgeben (der Code ist einzeilig, zur Verwendung im Immediate-Fenster von Visual Studio)

Können Sie eine praktische Codezeile schreiben, die den Inhalt eines Arrays ausgibt?

Ich werde dies im Immediate Window von Visual Studio 2008 verwenden, also muss es wirklich in diesem Fenster funktionieren. Ich kann einige Anforderungen ausgelassen haben, aber das ist ziemlich genau das, was ich zu tun versuche.

3voto

Emmanuel Punkte 3403

Sowohl für das Watch- als auch für das Immediate-Fenster in Visual Studio wird der von ToString() für ein Objekt zurückgegebene String verwendet.

Sie können also ToString() überschreiben, wenn Sie wollen, und die menschenlesbare Darstellung Ihrer Klassen so formatieren, dass sie die Informationen anzeigen, die Sie während der Debugging-Aktivitäten im Watch oder Immediate Windows benötigen.

Zum Beispiel,

public class Foo
{
   public String Bar { get; set; }
   private Int32 _intValue;
   public Int32 Value { get { return _intValue; } }
   override public ToString()
   {
      return "Bar: " + Bar + " has Value: " + Value;
   }
}

Wenn Sie nun ein Array von Foo-Objekten mit dem Namen fooArray erstellen, listet die Eingabe von ? fooArray im Fenster Immediate alle Foo-Objekte mit dem ToString()-Rückgabewert für jedes in geschweiften Klammern auf. Etwa so:

? fooArray
{Foo[2]}
[0]: {Bar: hi has Value: 1}
[1]: {Bar: there has Value: 2}

2voto

Technophile Punkte 454

Denken Sie daran, dass Sie eine Methode in dem Programm, das Sie debuggen, referenzieren können. Ich habe eine Utility-Methode (sagen wir, sie befindet sich in einer MyDebug-Klasse):

    public static string ToReadableString(byte[] data)
    {
        int length = data.Length;
        var sb = new StringBuilder(length);
        for (int index = 0; index < length; ++index)
        {
            char ch = (char)data[index];
            sb.Append(Char.IsControl(ch) ? '.' : ch);
        }
        return sb.ToString();
    }

und (da mein Array data heißt) eine Watch-Anweisung hinzufügen:

MyDebug.ToReadableString(data)

1voto

Mike Kelly Punkte 937

Ich hatte dieses Problem mit dem Byte-Array, das in einem MemoryStream enthalten ist. Ich fand heraus, dass es funktioniert, den Inhalt des MemoryStreams im Visual Studio 2010 Watch-Fenster anzuzeigen:

System.Text.ASCIIEncoding.ASCII.GetString(((((System.IO.MemoryStream)(s)))._buffer))

0voto

mletterle Punkte 3928

Vielleicht ist es einfacher, einfach die Registerkarte Uhr zu verwenden. Aber die Eingabe des Namens des Arrays in der Registerkarte "Sofort" sollte den Inhalt in einem einigermaßen brauchbaren Format zurückgeben.

0voto

Mano-Wii Punkte 562

Wenn Sie zum Beispiel ein Array drucken wollen m vom Typ float[4][4] einfach tippen: (float(*)[4][4])m

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X