[Serializable]
public class SampleBase
{
[HumanReadableAttribute("The Base")]
public string BaseProp { get; set; } // "testing things"
public bool AllUrBase { get; set; } // true
public string AsHumanReadable()
{
var type = GetType();
var properties = type.GetProperties();
var stringRepresentation = new List<string>();
foreach (var p in properties)
{
var ca = p.GetCustomAttributes(true).FirstOrDefault(a => a is HumanReadableAttribute);
var v = p.GetValue(this, null);
var t = v.GetType();
var e = t.IsEnum ? t.GetField(Enum.GetName(t, v)).GetCustomAttributes(typeof(HumanReadableAttribute), false).FirstOrDefault() as HumanReadableAttribute : null;
stringRepresentation.Add(string.Format("{0}: {1}", ca ?? p.Name, v is bool ? ((bool) v ? "Yes" : "No") : e ?? v));
}
return string.Join("\r\n", stringRepresentation);
}
}
[Serializable]
public class SampleClass {
public enum MyEnum {
[HumanReadableAttribute("It makes sense")]
MakesSense,
[HumanReadableAttribute("It's weird")]
Nonsense
}
[HumanReadableAttribute("What do you think about this")]
public MyEnum MyProperty { get; set; } // Nonsense
}
Вызов метода AsHumanReadable
будет производитьОтображение содержимого объекта
The Base: testing things
AllUrBase: Yes
What do you think about this: It's weird
Мои пользователи могут добавлять SampleClass
объекты (или широкий спектр других объектов, реализующих SampleBase
) к корзине, которая будет храниться в течение позже использование. Сотрудник по обслуживанию клиентов будет читать результаты для проверки вещей.
Я думал о создании методов ToString (например, return "The Base" + BaseProp;
). Моя мысль о том, что подход атрибута является более гибким.
Каковы преимущества и недостатки этих двух подходов (техническое обслуживание, локализация (если возможно, во избежание магии) и т. Д.)?
Я не понимаю цели здесь. Почему вы украшаете свои классы (и заставляете потребителей вашего класса делать это), а не, скажем, делать простые записи? –
Цель состоит в том, чтобы сделать его понятным для человека. Это и поддержка локализации. Но украшение, вероятно, избыточно в этом случае. См. Мой комментарий к ответу куна. Я не думаю, что журналирование решит проблему для меня. – Heki