Attribut.isdefined () funktioniert nicht für meinen benutzerdefinierten memberInfo -TypC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Attribut.isdefined () funktioniert nicht für meinen benutzerdefinierten memberInfo -Typ

Post by Anonymous »

kurz davor ist, dass ich es satt habe, mich getrennt mit Eigenschaften und Feldern umzugehen. Ich habe ein VariableInfo Strategiemuster erstellt, um beide zu handhaben, ohne wissen zu müssen, welcher Typ es ist. Sie füttern den Kontext, ein FieldInfo oder einen PropertyInfo und es macht eine VariableInfo daraus. Ich habe auch VariableInfo memberInfo erstellt. Es gibt Erweiterungen, um die Felder und Eigenschaften eines Typs zu ziehen und alle als VariableInfo -Objekte zurückzugeben. Hier ist ein Teil der Klassendefinition (überprüfen Sie dieses GitHub -Repo für die vollständige Definition aller Klassen, die ich hier beschreibe) < /p>

Code: Select all

public class VariableInfo : MemberInfo
{
private InfoParent variable;
public VariableInfo(PropertyInfo pi)
{
variable = new VariableProperty(pi);
}
public VariableInfo(FieldInfo fi)
{
variable = new VariableField(fi);
}
...
}
Das Problem, das ich habe, verwendet Attribut. Es funktioniert für Felder, aber keine Eigenschaften. Wenn Sie ein paar Ebenen in den BCL -Quellcode springen, sehen Sie den Punkt, an dem er fehlschlägt -< /p>

Code: Select all

return element.MemberType switch
{
MemberTypes.Property => InternalIsDefined((PropertyInfo)element, attributeType, inherit),
MemberTypes.Event => InternalIsDefined((EventInfo)element, attributeType, inherit),
_ => element.IsDefined(attributeType, inherit),
};
Es ist das Casting aus der Elementvariablen von memberInfo zu einer PropertyInfo Version davon. System.inValidcastException: 'Objekt' System.Reflection.PropertyInfo '. PropertyInfo so viel wie ich in meinem Code möchte.

Code: Select all

public static explicit operator PropertyInfo(VariableInfo a)
{
return a.variable.mi as PropertyInfo;
}
public static explicit operator FieldInfo(VariableInfo a)
{
return a.variable.mi as FieldInfo;
}

public static implicit operator VariableInfo(PropertyInfo a)
{
return new VariableInfo(a);
}
public static implicit operator VariableInfo(FieldInfo a)
{
return new VariableInfo(a);
}
< /code>
Dies funktioniert in meinem Testcode einwandfrei: < /p>
PropertyInfo asPropInfo = (PropertyInfo)VariableInfoObjectContainingAProperty;
Aber die Interna von Attribut.isdefined kann mit meinen expliziten Überladungen nicht gegossen werden. Weiß jemand, warum dies fehlschlägt oder wie es behoben wird?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post