簡體   English   中英

c#枚舉標志檢查字符串是否在標志中

[英]c# enum flag check if string is in flag

我有一個枚舉:

[Flags]
public enum WeekDays
{

    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    Saturday = 32,
    Sunday = 64
}

如果我這樣做:

var weekDays = WeekDays.Monday | WeekDays.Tuesday | WeekDays.Friday;

如何檢查是否在 weekDays 中設置了例如Monday的字符串?

查看以下代碼。 您可以使用HasFlag屬性:

class Program
    {
        [Flags]
        public enum WeekDays
        {

            Monday = 1,
            Tuesday = 2,
            Wednesday = 4,
            Thursday = 8,
            Friday = 16,
            Saturday = 32,
            Sunday = 64
        }

        private static string result;

        static void Main()
        {
            var wd = new WeekDays();
            Console.WriteLine(wd.HasFlag(WeekDays.Monday));

            wd = WeekDays.Monday;

            Console.WriteLine(wd.HasFlag(WeekDays.Monday));

            bool is_defined = Enum.IsDefined(typeof(WeekDays), "Monday");

            Console.WriteLine(is_defined);

            bool is_not_defined = Enum.IsDefined(typeof(WeekDays), "Mondays");

            Console.WriteLine(is_not_defined);

            bool has_flag_by_string = Enum.TryParse<WeekDays>("Monday", out wd);

            Console.WriteLine(has_flag_by_string);

            Console.ReadLine();
        }
    }

編輯

添加了通過字符串檢查屬性是否存在的功能。

編輯 2

添加了Enum.TryParse<>來解析字符串值。

參考:

https://msdn.microsoft.com/en-us/library/system.enum.hasflag(v=vs.110).aspx

我想你想要這個

WeekDays days = WeekDays.Monday | WeekDays.Tuesday;

string monday = "Monday";

WeekDays day;
if (Enum.TryParse(monday, true, out day))
{
    if (days.HasFlag(day))
    {
        Console.WriteLine("Has {0}", monday);
    }
    else
    {
        Console.WriteLine("Does not have {0}", monday);
    }
}
else
{
    Console.WriteLine("invalid string");
}

首先,您可以使用Enum.TryParse將字符串解析為枚舉值或確定字符串是否無效。 然后使用HasFlag來查看它是否包含在內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM