【问题标题】:find string from enum从枚举中查找字符串
【发布时间】:2021-02-01 09:56:49
【问题描述】:

我尝试了以下建议,但没有任何效果,并且我编辑了代码以使其更容易。 这段代码的目的是根据枚举获取数据所在的行。

例如:如果我为搜索提供值“bra”,那么想要的结果应该是来自 enum 的巴西,但由于 enum 是一个 int,那么就像我在说如果我们假设选择 location = 3 的数据枚举中的那个巴西=3。

public LocationType Location { get; set; }
    
public enum LocationType
{
    brazil,
    USA,
    UK
} 
public async Task<IActionResult> Index(string id, [FromForm] string search)

if (!string.IsNullOrWhiteSpace(search))
{
    result = applicationDbContext.Where(x => x.Location.ToString().Contains(search)).ToList();
}

注意:搜索是字符串输入。

【问题讨论】:

  • 我不确定,但也许这可以帮助你 - link
  • “不认识”是什么意思?你期望什么输出,你会得到什么?
  • 我认为您错过了,枚举是 int 类型,您可以使用 Enum.GetName(typeof(LocationType), x.Location) 并将转换为字符串的 int 与 char 进行比较,最终结果为 false。
  • Location 的价值如何?
  • (char)locs 确实不是您期望的那样。枚举只不过是一个 int,因此它可以直接转换为 char。 但是 (char)1不是字母A,而是一个ASCII控制码。不过,A 的字母代码是 65。

标签: c# asp.net-mvc


【解决方案1】:

如果您想获取与搜索匹配的数值(或枚举值),您可以按如下方式进行:

public async Task<IActionResult> Index(string id, [FromForm] string search)

if (!string.IsNullOrWhiteSpace(search))
{
     List<LocationType> locations = Enum.GetNames(typeof(LocationType))
               .Where(x => x.ToLower().Contains(search.ToLower()))
               .Select(x => Enum.Parse<LocationType>(x))
               .ToList();

     result = applicationDbContext.Where(x => locations.Contains(x.Location)).ToList();
}

【讨论】:

    【解决方案2】:

    将您的枚举转换为字符串:

     Location.ToString();    //output = A
    

    但这会将您的 Enum 转换为包含所有成员的字符串:

    string[] locs= Enum.GetNames(typeof(LocationType ));
    

    可以在您的查询中使用。

    【讨论】:

      【解决方案3】:

      (char)locs 确实不是您期望的那样。枚举只不过是一个 int,因此它可以直接转换为 char。 但是 (char)1 不是字母A,而是一个ASCII 控制码。不过,A 的字母代码是 65。

      所以你有几个机会:

      1. 让您的枚举从 65: 开始:

        public enum LocationType
        {
            A = 65,
            B = 66,
            C = 67,
            K = 75
        }
        

        现在,当您将枚举转换为 char 时,您会得到 A 例如。

      2. 使用enum.ToString(),例如LocationType.C.ToString() 返回"C"

      3. 不过,更好的办法是使用内置功能来获取枚举名称as m.r226 pointed out in his answer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-19
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-01
        相关资源
        最近更新 更多