如何在忽略大小写 c# 的情况下检查枚举值中的“包含”?

Niv*_*nan 2 c# string enums enumeration

我需要检查 Enum 中存在的字符串值或不使用Contains.

public enum Days
{
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
}

public class ResultObj
{
   public int Id { get; set; }
   public string Name { get; set; }
}

var filter = "Wed";
var dayList = Enum.GetValues(typeof(Days))
               .Cast<Days>()
               .Where(x => Enum.IsDefined(typeof(Days), filter))
               .Select(d => new ResultObj
               {
                   Id = (int)d,
                   Name = d.ToString()
               }).ToList();
Run Code Online (Sandbox Code Playgroud)

如果给出“周三”的意思,我需要一个 dayList 结果为{ Id = 3, Name = Wednesday }.

如果给定过滤器为“星期三”意味着,我需要一个 dayList 结果为{ Id = 3, Name = Wednesday }.

如果给定过滤器为“星期三”的意思,我需要一个 dayList 结果为{ Id = 3, Name = Wednesday }.

如果给定过滤器为“dnes”意味着,我需要一个 dayList 结果为{ Id = 3, Name = Wednesday }.

如果给定过滤器为“xyx”的意思,则dayList计数应为零。

Swe*_*per 5

您可以使用Where子句,例如:

.Where(x => Enum.GetName(typeof(Days), x).ContainsCaseInsenitive(filter))
Run Code Online (Sandbox Code Playgroud)

ContainsCaseInsensitive字符串的扩展方法在哪里:

// adapted from: /sf/answers/1082510831/
public static bool ContainsCaseInsensitive(this string a, string b) =>
    CultureInfo.InvariantCulture.CompareInfo.IndexOf(a, b, CompareOptions.IgnoreCase) >= 0;
Run Code Online (Sandbox Code Playgroud)