ما هي الواجهة أو الطريقة التي يجب على صفي تنفيذها لطباعة ما أريد في Console.WriteLine؟
-
06-07-2019 - |
سؤال
لدي كائن من الفئة 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;
}
شكرًا للملصقات أدناه التي وضعتني على الطريق الصحيح