¿Qué interfaz o método debería implementar mi clase para imprimir lo que quiero en Console.WriteLine?

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

Pregunta

Tengo un objeto de clase F. Quiero generar el contenido del objeto usando Console.WriteLine para actualizaciones de estado rápidas y sucias como esta:

Console.WriteLine (objectF);

Esto imprime solo el nombre de la clase en la consola:

F

Quiero sobrecargar esto de alguna manera para poder imprimir información útil sobre el objeto y sus propiedades.

Ya tengo una solución alternativa: sobrecargar el método ToString en mi clase y luego llamar a: Console.WriteLine (objectF.ToString ());

Pero preferiría tener la sintaxis más simple. ¿Alguna idea?

¿Fue útil?

Solución

Console.WriteLine (objectF)

Debería funcionar, si sobrecargó ToString . Cuando el marco necesita convertir un objeto en una representación de cadena, invoca ToString .

public override string ToString()
{
    // replace the line below with your code
    return base.ToString();
}

Otros consejos

Debe anular ToString (), aunque en algunas situaciones puede encontrar útil el siguiente código:

public static class ObjectUtility
{
    public static string ToDebug(this object obj)
    {
        if (obj == null)
            return "<null>";

        var type = obj.GetType();
        var props = type.GetProperties();

        var sb = new StringBuilder(props.Length * 20 + type.Name.Length);
        sb.Append(type.Name);
        sb.Append("\r\n");

        foreach (var property in props)
        {
            if (!property.CanRead)
                continue;
            // AppendFormat defeats the point
            sb.Append(property.Name);
            sb.Append(": ");
            sb.Append(property.GetValue(obj, null));
            sb.Append("\r\n");
        }

        return sb.ToString();
    }
}

El uso es simplemente incluir el espacio de nombres que contiene ObjectUtility y luego ...

var f = new F();
Console.WriteLine(f.ToDebug());

El uso de reflexión anterior no es muy bueno para el código de alto rendimiento, así que no lo use en un escenario de producción donde se desee un alto rendimiento.

Seguiría usando ToString (). Ese es su propósito de existir. Además, a menos que tenga una cadena de formato, puede escribir:

Console.WriteLine(objectF)

Encontré la causa de mi problema. Me había olvidado de definir mi implementación de ToString () como una anulación . La sintaxis correcta es:

public override string ToString()
{
   ///Do stuff...
   return string;
}

Gracias a los carteles a continuación que me pusieron en el camino correcto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top