Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查或查找.NET属性?_C#_.net_Attributes - Fatal编程技术网

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方法很好;-)欢迎并感谢您…我发现这个的另一个巧妙用法是存储一个显示名称…这样您就可以将显示保留而不是保留。另外,如果您想将其本地化,则只需存储资源文件的密钥。。。