2010-01-08 6 views

Respuesta

30
myArray.ToList().ForEach(Console.WriteLine); 

Honestamente, no creo que funcione en la ventana inmediata. Es un buen truco para imprimir todo en una sola línea, pero creo que para la ventana inmediata, todo lo que necesita es la siguiente:

? myArray 
+3

No se puede usar lambdas, y no se puede suponer que se está haciendo referencia a Linq. – mletterle

+0

Buen punto, elimino el lambda. – BFree

+0

"Enlace de error al método de destino" – MedicineMan

0

podría ser más fácil usar la pestaña reloj. Pero simplemente escribiendo el nombre de la matriz en la pestaña inmediata debería devolver los contenidos en un formato algo útil.

+0

solo imprime los primeros 100 valores –

8

donde a es la matriz

?a 
+6

Ni siquiera necesita el signo de interrogación – mletterle

+0

solo imprime los primeros 100 valores –

3

Por tanto el reloj y las ventanas inmediatas en Visual Studio, se utilizará la cadena devuelta por ToString() de un objeto.

Para que pueda anular ToString() si desea y formatear la representación legible por el ser humano de cualquiera de sus clases para que muestren la información que necesita en las ventanas Ver o Inmediato durante las actividades de depuración.

Por ejemplo,

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

Así que ahora si se crea una matriz de Foo objetos nombrados fooArray, mecanografía? fooArray en la ventana Inmediato mostrará una lista de todos los objetos Foo con el valor de retorno ToString() para cada uno entre llaves. Algo como esto:

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

muchas veces no será propietario de la clase que está utilizando/depurando – MedicineMan

+0

No es exactamente cierto. La cadena devuelta por 'ToString()' no se usará (al menos en el caso de Watch pero tal vez en Inmediato) si tiene un atributo 'DebuggerDisplay'. – Brian

+0

Gracias Brian por consejo sobre DebuggerDisplay. – Emmanuel

1

tuve este problema con la matriz de bytes contenida dentro de un MemoryStream - me encontré con esto funcionó para ver el contenido de la MemoryStream en el Visual Studio 2010 reloj ventana:

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

+1 para el truco 'System.Text.ASCIIEncoding.ASCII.GetString', estaba buscando algo como esto – Patashu

6
String.Join("; ", myArray); 
+0

Si imprime una matriz flotante grande con este método, tenga cuidado de que el número impreso al final de la línea de los dígitos se pueden separar a la siguiente línea. – YantingChen

+0

También perderá precisión de los números de flotación en el resultado impreso. – YantingChen

+0

Utiliza el ToString predeterminado del tipo, si eso no es lo que desea imprimir, es probable que necesite un bucle o una instrucción linq. –

10

que utilizo:

BitConverter.ToString(bytes); //output: 4A-0B-11-13 etc. 

Pobre BitConverter, siempre en el olvido.

2

Recuerde que puede hacer referencia a un método en el programa que está depurando.Tengo un método de utilidad (digamos que está en una clase MyDebug):

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

y (ya que mi matriz se llama data) añadir una declaración de reloj:

MyDebug.ToReadableString(data) 
1

siempre puede crear una segunda variable con el contenido que desea y verifique el valor de eso.

var ids = people.Select(s => s.id).ToList(); 

Devolvería todos los identificadores que está tratando de ver.

+1

Me funcionó bien para tomar rápidamente los contenidos de algunas propiedades y volcarlos fácilmente en la ventana inmediata. Incluso concatené unas pocas para hacer una frase como algunas de las otras sugerencias 'var debugstuff = stuff.Select (s => s.SomeCol +" y "+ s.OtherCol) .ToList()' –

Cuestiones relacionadas