Вопрос

Я использую Cecil, чтобы попытаться прочитать мои атрибуты properties:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public sealed class TraceMethodAttribute : Attribute {
    public TraceMethodAttribute() {
        MethodStart = true;
        MethodReturn = true;
        MethodMessages = true;
    }

    public bool MethodStart { get; set; }
    public bool MethodReturn { get; set; }
    public bool MethodMessages { get; set; }
}

[TraceMethod(MethodMessages = false)]
static void Main(string[] args) {
}

...

if (attribute.Constructor.DeclaringType.FullName == typeof(TraceMethodAttribute).FullName) {         
  if ((bool)attribute.Fields["MethodMessages"] == true) {
        EditMethodStart(assembly, method);
  }

То есть я бы хотел, чтобы этот последний блок кода проверялся всякий раз, когда атрибут, применяемый, например, к Main, имеет значение MethodMessages true или false.Из того, что я видел, похоже, что оба атрибута.Поля.Количество и атрибуты.Свойства.Значение Count равно 0.Почему это так?

Спасибо

Это было полезно?

Решение

Должно нормально работать при доступе к коллекции свойств с помощью индексатора.

if (attribute.Constructor.DeclaringType.FullName == typeof(TraceMethodAttribute).FullName) {         
  if ((bool)attribute.Properties["MethodMessages"] == true) {
        EditMethodStart(assembly, method);
  }

Просто скомпилировал и проверил его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top