I've got a situation like the following:
enum Header
{
Sync,
[OldProtocol] Keepalive,
Ping,
[OldProtocol] Auth,
[OldProtocol] LoginData
//...
}
I need to obtain an array of elements on which the OldProtocolAttribute
is defined. I've noticed that the Attribute.IsDefined()
method and its overloads apparently don't support this kind of situation.
My question is:
typeof(Header).GetField()
?As far as I'm aware, you have to get the attribute from the field. You'd use:
var field = typeof(Header).GetField(value.ToString());
var old = field.IsDefined(typeof(OldProtocolAttribute), false);
Or to get a whole array:
var attributeType = typeof(OldProtocolAttribute);
var array = typeof(Header).GetFields(BindingFlags.Public |
BindingFlags.Static)
.Where(field => field.IsDefined(attributeType, false))
.Select(field => (Header) field.GetValue(null))
.ToArray();
Obviously if you need this often, you may well want to cache the results.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With