C# 如何检查或查找.NET属性?
我有一个任务状态的枚举。有些状态被视为已过时,我已将其标记为已过时,如下所示:C# 如何检查或查找.NET属性?,c#,.net,attributes,C#,.net,Attributes,我有一个任务状态的枚举。有些状态被视为已过时,我已将其标记为已过时,如下所示: public enum TaskStatus { [Description("")] NotSet = 0, Pending = 1, Ready = 2, Open = 3, Completed = 4, Closed = 5, [Description("On Hold")][Obsolete] OnHold = 6, [Obsole
public enum TaskStatus
{
[Description("")]
NotSet = 0,
Pending = 1,
Ready = 2,
Open = 3,
Completed = 4,
Closed = 5,
[Description("On Hold")][Obsolete]
OnHold = 6,
[Obsolete]
Canceled = 7
}
在我的用户界面中,我用枚举值填充了一个下拉列表,但我想忽略那些标记为过时的值。我是如何做到这一点的?您可以使用,我知道有一个使其从属性资源管理器中隐藏,但似乎记不住名称。您可以使用,我知道有一个使其从属性资源管理器中隐藏,但似乎记不住名称。您可以编写LINQ查询:
var availableTaks = typeof (TaskStatus).GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)
.Where(f => f.GetCustomAttributes(typeof (ObsoleteAttribute), false).Length == 0);
foreach(var task in availableTaks)
Console.WriteLine(task);
您可以编写LINQ查询:
var availableTaks = typeof (TaskStatus).GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)
.Where(f => f.GetCustomAttributes(typeof (ObsoleteAttribute), false).Length == 0);
foreach(var task in availableTaks)
Console.WriteLine(task);
然后,您可以使用选择的方法在数组中循环,并检查是否有任何自定义属性
然后,您可以使用您选择的方法在数组中循环,并检查是否有任何自定义属性。heh看起来我这次真的很慢……linq方法很好;-)欢迎并感谢您…我发现这个的另一个巧妙用法是存储一个显示名称…这样您就可以将显示保留而不是保留。另外,如果您想对其进行本地化,那么只需存储资源文件的密钥……呵呵,这次我的速度似乎很慢……linq方法很好;-)欢迎并感谢您…我发现这个的另一个巧妙用法是存储一个显示名称…这样您就可以将显示保留而不是保留。另外,如果您想将其本地化,则只需存储资源文件的密钥。。。