Я создаю пользовательский атрибут. И я буду использовать его в нескольких классах:Получить пользовательские атрибуты Общий
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public sealed class Display : System.Attribute
{
public string Name { get; set; }
public string Internal { get; set; }
}
public class Class1
{
[Display(Name = "ID")]
public int ID { get; set; }
[Display(Name = "Name")]
public string Title { get; set; }
}
public class Class2
{
[Display(Name = "ID")]
public int ID { get; set; }
[Display(Name = "Name")]
public string Title { get; set; }
}
Здесь работает правильно, но я хочу, чтобы сделать его максимально стандартизован, как пример MVC:
Class1 class1 = new Class1();
class1.Title.DisplayName()// returns the value "Name"
Единственное, что я мог сделать сформировать петлю моей собственности, но мне нужно, чтобы сообщить мой TypeOf Class1
foreach (var prop in typeof(Class1).GetProperties())
{
var attrs = (Display[])prop.GetCustomAttributes(typeof(Display), false);
foreach (var attr in attrs)
{
Console.WriteLine("{0}: {1}", prop.Name, attr.Name);
}
}
есть ли способ сделать это так, как я хочу?
Вы никогда не говорили, что хотите .. Не могли бы вы уточнить? –
Я хотел бы расширить метод, чтобы вернуть значение атрибута отображения. Что-то вроде этого: class1.Title.DisplayName(); // возвращает значение «Имя» – Tiago
Я не думаю, что это возможно - когда вы получаете значение свойства, оно теряет соединение с классом, где оно расположено, поэтому вы не можете создать метод расширения, который находит собственный класс по значению свойство (это действительно то же самое, что и попытка получить атрибут константы 'string' из' int') ... –