ما هي الواجهة أو الطريقة التي يجب على صفي تنفيذها لطباعة ما أريد في Console.WriteLine؟

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

سؤال

لدي كائن من الفئة F.أريد إخراج محتويات الكائن باستخدام Console.WriteLine للحصول على تحديثات الحالة السريعة والقذرة مثل هذا:

Console.WriteLine(objectF);

يؤدي هذا إلى طباعة اسم الفئة فقط على وحدة التحكم:

F

أريد زيادة التحميل بطريقة ما حتى أتمكن بدلاً من ذلك من طباعة بعض المعلومات المفيدة حول الكائن وخصائصه.

لدي الحل البديل بالفعل:لزيادة تحميل طريقة ToString في صفي ثم الاتصال:Console.WriteLine(objectF.ToString());

لكنني أفضل أن يكون لدي بناء جملة أبسط.أيه أفكار؟

هل كانت مفيدة؟

المحلول

وConsole.WriteLine (objectF)

ويجب أن تعمل، إذا كنت زائد ToString. عندما يحتاج إطار لتحويل كائن إلى تمثيل سلسلة، فإنه يستحضر ToString.

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

نصائح أخرى

ويجب تجاوز ToString () وإن كان في بعض الحالات قد تجد فقط على التعليمات البرمجية التالية مفيدة:

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

والاستخدام لتشمل ببساطة مساحة تحتوي على ObjectUtility ثم ...

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

والاستخدام انعكاس فوق ليست جيدة جدا لرمز عالية الأداء حتى لا تستخدم في سيناريو الإنتاج حيث هو المطلوب الأداء العالي.

وأود أن الاستمرار في استخدام ToString (). هذا هو الغرض من أجل القائمة. أيضا، لم يكن لديك سلسلة تنسيق، يمكنك كتابة فقط:

Console.WriteLine(objectF)

لقد وجدت سبب مشكلتي.لقد أهملت تحديد تطبيقي لـ ToString() باعتباره تجاوز.بناء الجملة الصحيح هو:

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

شكرًا للملصقات أدناه التي وضعتني على الطريق الصحيح

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top