簡體   English   中英

如何在忽略大小寫 c# 的情況下檢查枚舉值中的“包含”?

[英]How to check “Contains” in enum values with ignoring case c#?

我需要檢查 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();

如果給出“星期三”的意思,我需要一個 dayList 結果為{ Id = 3, Name = Wednesday }

如果給定過濾器為“星期三”意味着,我需要一個 dayList 結果為{ Id = 3, Name = Wednesday }

如果給定過濾器為“星期三”的意思,我需要一個 dayList 結果為{ Id = 3, Name = Wednesday }

如果給定過濾器為“dnes”的意思,我需要一個 dayList 結果為{ Id = 3, Name = Wednesday }

如果給定過濾器為“xyx”,則dayList計數應為零。

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

.Where(x => Enum.GetName(typeof(Days), x).ContainsCaseInsenitive(filter))

其中ContainsCaseInsensitive是字符串的擴展方法:

// adapted from: https://stackoverflow.com/a/15464440/5133585
public static bool ContainsCaseInsensitive(this string a, string b) =>
    CultureInfo.InvariantCulture.CompareInfo.IndexOf(a, b, CompareOptions.IgnoreCase) >= 0;

您可以稍微重寫您的Linq方法鏈,select 來自Enum值數組的字符串值,並檢查Enum名稱是否包含過濾器(不區分大小寫)。 然后 select 一個ResultObj並將Enum值轉換回來

 var filter = "Wed";
 var dayList = Enum.GetValues(typeof(Days))
     .Cast<Days>()
     .Select(x => x.ToString())
     .Where(x => x.Contains(filter, StringComparison.OrdinalIgnoreCase))
     .Select(d => new ResultObj
     {
         Id = (int)Enum.Parse(typeof(Days), d),
         Name = d
     }).ToList();

暫無
暫無

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

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