如何在忽略 c# 的情况下检查枚举值中的 "Contains"?
How to check "Contains" in enum values with ignoring case c#?
我需要使用 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();
如果给定 "Wed" 意味着,我需要一个 dayList 结果作为 { Id = 3, Name = Wednesday }
。
如果给定过滤器 "Wednesday" 意味着,我需要一个 dayList 结果作为 { Id = 3, Name = Wednesday }
。
如果给定过滤器 "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:
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();
我需要使用 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();
如果给定 "Wed" 意味着,我需要一个 dayList 结果作为 { Id = 3, Name = Wednesday }
。
如果给定过滤器 "Wednesday" 意味着,我需要一个 dayList 结果作为 { Id = 3, Name = Wednesday }
。
如果给定过滤器 "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:
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();