Я создал класс Attribute
под названием RelatedPropertyAttribute
:
[AttributeUsage(AttributeTargets.Property)]
public class RelatedPropertyAttribute: Attribute
{
public string RelatedProperty { get; private set; }
public RelatedPropertyAttribute(string relatedProperty)
{
RelatedProperty = relatedProperty;
}
}
Я использую это, чтобы указать связанные свойства в классе. Пример того, как я буду использовать его:
public class MyClass
{
public int EmployeeID { get; set; }
[RelatedProperty("EmployeeID")]
public int EmployeeNumber { get; set; }
}
Я хотел бы использовать лямбда-выражения, чтобы я мог передать сильный тип в свой конструктор атрибутов, а не "магическую строку". Таким образом, я могу использовать проверку типа компилятора. Например:
public class MyClass
{
public int EmployeeID { get; set; }
[RelatedProperty(x => x.EmployeeID)]
public int EmployeeNumber { get; set; }
}
Я думал, что могу сделать это со следующим, но компилятором это не разрешено:
public RelatedPropertyAttribute<TProperty>(Expression<Func<MyClass, TProperty>> propertyExpression)
{ ... }
Ошибка:
Не-общий тип 'RelatedPropertyAttribute' не может использоваться с аргументы типа
Как я могу это достичь?