Вы можете добавить в свойство пользовательский атрибут, а затем использовать метод расширения объекта для доступа к этим атрибутам.
Как-то так должно работать
Сначала вам нужно будет создать свой класс атрибута
[AttributeUsage(AttributeTargets.All/*, AllowMultiple = true*/)]
public class WarningAttribute : System.attribute
{
public readonly string Warning;
public WarningAttribute(string warning)
{
this.Warning = warning;
}
}
Больше чтения Здесь
Используйте это как таковое
[WarningAttribute("Warning String")]
public string A {get;set;}
Тогда получите к нему доступ, как это MSDN Article
public static string Warning(this Object object)
{
System.Attribute[] attrs = System.Attribute.GetCustomAttributes(object);
foreach (System.Attribute attr in attrs)
{
if (attr is WarningAttrbiute)
{
return (WarningAttribute)attr.Warning;
}
}
}
Тогда, если у вас есть предмет, к которому вы хотите получить доступ к предупреждению, вы можете просто позвонить
test.A.Warning;
Если вы хотите установить строку предупреждения, вы могли бы реализовать какой-то метод установки для этого немного более аккуратно. Потенциально путем установки вторичного объекта или типа свойства.
Альтернативный способ сделать это - вместо использования string
и object
вы можете создать собственный универсальный тип для обработки этого свойства.
что-то вроде
public class ValidationType<T>
{
public T Value {get; set;}
public string Warning {get; set;}
public string Error {get; set;}
public ValidationType(T value)
{
Value = value;
}
}
Используйте как
var newWarning = new ValidationType<string>("Test Type");
newWarning.Warning = "Test STring";
Console.WriteLine("newWarning.Value");