Я ищу способ получить собственный атрибут внутри свойства.Получение собственных атрибутов/отражение?
Позвольте мне показать, что я ищу
Я хочу использовать свойство для поплавков/двойных значений, чтобы дать tolerence для Comparision.
например.
[FieldAttribute(CompareTolerance = 0.001)]
public float SomeProperty
{
get { return this.someProperty; }
set
{
if (Math.Abs(someProperty- value) > 0.001) // here i would like to use somthing like '> FieldAttribute.CompareTolerance'
this.someProperty = value;
}
}
Из другого класса я хотел бы использовать
PropertyInfo propertyInfo = someobject.GetType().GetProperty("SomeProperty");
if (null != propertyInfo)
{
Attribute attribute = Attribute.GetCustomAttribute(propertyInfo, typeof (FieldAttribute));
FieldAttribute fieldAttribute = attribue as FieldAttribute;
return fieldAttribute.CompareTolerance;
}
...
Таким образом, в конце концов, мне нужно было только
if(Math.Abs(someProperty - value) < someobject.CompareTolerance("SomeField")) ... values are equal
Но есть способ, чтобы получить atribute в пределах собственности без использования отражения каждый раз (это.CompareTolerance («SomeField»))
Не совсем. Атрибут, который у вас есть для кода экспликации в этом свойстве, кажется мне глупым. Вместо того, чтобы записывать константу в атрибут, записывайте ее в код, который вы должны писать в любом случае. Если вам нравится это через атрибут, вы можете пойти по дороге AOP и использовать что-то вроде Postsharp. Там вы можете создать атрибут, который будет вводить правильный код в compiletime, чтобы отражение не было необходимым. И если сделано правильно, специальное кодирование в свойстве также не понадобится. – Ralf
Я бы не только хотел использовать его в атрибуте, но и в других классах, которые могут сравниться с этим свойством. Он предназначен только для определения чего-то вроде допущения ONCE для значения и использования допуска в разных местах (например, для сравнения чего-либо с этим свойством, но не для его установки). Использовать значение дважды кажется источником ошибок для меня. Вы никогда не узнаете или не заметите, изменит ли кто-либо атрибут, но не сеттер, или установщик, но не атрибут. Если вы создаете второй класс со всеми допусками как static/const, обзор отсутствует. – Offler
Тогда я бы сказал, что возвращаемый тип этого свойства больше не плавает. Его новый тип, который представляет собой поплавок, его толерантность и правильные методы сравнения. – Ralf