2016-08-17 5 views
2

ich die folgende Klasse Eigenschaften haben:C# Get-Feld-Wert von Attribut (Propertyinfo)

[EffectAspect(Enums.Effects.Low)] 
public int Wind { set; get; } 

[EffectAspect(Enums.Effects.Low)] 
public int Fire { set; get; } 

[EffectAspect(Enums.Effects.Medium)] 
public int Water { get; set; } 

[EffectAspect(Enums.Effects.Huge)] 
public int Earth { get; set; }` 

Nun lassen Sie uns sagen, dass ich die gesamten Lows berechnen möchten, Medien und Huges. Also schrieb ich so etwas wie:

List<Enums.Effects> result = new List<Enums.Effects>(); 

PropertyInfo[] properties = GetType().GetProperties(); 
foreach (PropertyInfo p in properties) 
{ 
    object[] attrs = p.GetCustomAttributes(true); 
    foreach (Object attr in attrs) 
    { 
     var effectAttr = attr as EffectAspect; 
     if (effectAttr != null) 
     { 
      int amount = (int)p.GetConstantValue(); 
      for (int i = 0; i < amount; i++) 
      { 
       result.Add(effectAttr.Aspect); 
      } 
     } 
    } 
} 
return result;    

Zum Beispiel: Wenn Wind = 3, gibt es mindestens 3 Enums.Effects.Low innerhalb der result Liste wäre.

[AttributeUsage(AttributeTargets.Property)] 
public sealed class EffectAspectAttribute : Attribute 
{ 
    public Enums.EffectsAspect { get; private set; } 

    public EffectAspectAttribute (Enums.EffectsAspect aspect) 
    { 
     this.Aspect = aspect; 
    } 
} 

Die Probleme ist: int amount = (int)p.GetConstantValue(); wirft Ausnahmen sagt:

Wörtliche Wert nicht gefunden wurde.

Und ich konnte nicht finden, was es bedeutet.

+0

Nun, warum rufst du 'GetConstantValue'? That "Gibt einen Literalwert zurück, der einem Compiler von der Eigenschaft zugeordnet wird." - In Ihrem Fall gibt es keinen solchen Wert. Ich vermute, du willst 'p.GetValue (this, null)'. –

+0

Ich habe diese GetValue-Methode untersucht, aber das Hinzufügen dieser Parameter sah für mich etwas seltsam aus. trotzdem danke. Ich bin immer noch aufgeregt, du hast mir tatsächlich geholfen, du bist mein Held in diesem Forum :) –

Antwort

Verwandte Themen