Was AttributeTarget sollte ich verwenden, für die enum-Mitglieder?
Möchte ich meine IsGPUBasedAttribute
für die enum-Mitglieder so:
public enum EffectType
{
[IsGPUBased(true)]
PixelShader,
[IsGPUBased(false)]
Blur
}
aber der compiler lässt mich nicht zu verwenden:
[AttributeUsage (AttributeTargets.Enum, AllowMultiple = false)]
Was ist die richtige AttributeTarget
Wert zu begrenzen, die Nutzung einer enum-Mitglieder?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich weiß, gibt es nicht speziell für enum-Konstanten. Die nächstgelegene Sie bekommen könnte wäre wohl "Feld", die Grenzen der Nutzung auf Feld-Elemente einer Klasse oder struct (die Enum-Konstanten werden behandelt wie für Zwecke der Attribute).
EDIT: bringt die Erklärung des "warum" oben aus den Kommentaren, die Enum-Konstanten sind genau das, und als solche Ihre Werte und Gepflogenheiten sind direkt eingebettet in die IL. Eine enum-Deklaration ist daher wirklich nicht sehr Verschieden von der Erstellung einer statischen Klassendefinition mit statischen ständige Mitglieder:
... der einzige Unterschied ist, dass es leitet sich aus dem System.Enum, die einen Wert geben, statt eine Referenz der Klasse (Sie können nicht erstellen Sie eine statische Struktur, noch eine unconstructible ein).
enum
s wird die erste-Klasse-Bürger zu machen ist, dass Sie Ihnen eine stark typisierte Umgang damit zu finden. In Ihrem Fall kann ich dies tunif (MyEnum.Value1 == 235)
oderint i = MyEnum.Value1; i = SomeOtherEnum.Value1
etc.. aber nicht mit enums (ohne ein explizites casting oder so).AttributeTargets.Feld können Sie verwenden das Attribut für die enum-Werte.
Gibt es nicht eine Möglichkeit, um anzugeben, dass ein Attribut kann nur verwendet werden, die enum-Mitglieder. Ehrlich gesagt, du bist wahrscheinlich besser dran, die Erstellung Ihrer eigenen
Effect
(oderEffectType
) der Klasse und implementieren Sie diese wie gewöhnliche Eigenschaften, wenn Sie gehen, um mehrere Eigenschaften, wie diese.Beispielsweise
Unter diesem Ansatz geben Sie code, der leichter zu Lesen und besser im Vergleich zu Metadaten-Extraktion.