如何使用c#返回带有自定义属性标记的枚举值
本文关键字:枚举 自定义属性 何使用 返回 | 更新日期: 2023-09-27 18:04:55
我有一个枚举,其中一些成员由自定义属性标记,如:
public enum VideoClipTypeEnum : int
{
Exhibitions = 1,
TV = 2,
[ClipTypeDisplayAttribute(false)]
Content = 3
}
我的属性是:
public class ClipTypeDisplayAttribute : DescriptionAttribute
{
#region Private Variables
private bool _treatAsPublicType;
#endregion
#region Ctor
public ClipTypeDisplayAttribute(bool treatAsPublicType)
{
_treatAsPublicType = treatAsPublicType;
}
#endregion
#region Public Props
public bool TreatAsPublicType
{
get
{
return _treatAsPublicType;
}
set
{
_treatAsPublicType = value;
}
}
#endregion
}
获得用我的自定义属性标记的成员值的最好方法是什么?
试试这个
var values =
from f in typeof(VideoClipTypeEnum).GetFields()
let attr = f.GetCustomAttributes(typeof(ClipTypeDisplayAttribute))
.Cast<ClipTypeDisplayAttribute>()
.FirstOrDefault()
where attr != null
select f;
这实际上将返回枚举值的FieldInfo
。要获取原始值,请尝试以下操作:
var values =
... // same as above
select (VideoClipTypeEnum)f.GetValue(null);
如果您还想通过属性的某些属性进行过滤,您也可以这样做。这样的
var values =
... // same as above
where attr != null && attr.TreatAsPublicType
... // same as above
注意:这可以工作,因为枚举值(例如VideoClipTypeEnum.TV
)实际上是作为VideoClipTypeEnum
内部的静态常量字段实现的。
使用
获取List<int>
var values =
(from f in typeof(VideoClipTypeEnum).GetFields()
let attr = f.GetCustomAttributes(typeof(ClipTypeDisplayAttribute))
.Cast<ClipTypeDisplayAttribute>()
.FirstOrDefault()
where attr != null
select (int)f.GetValue(null))
.ToList();