【问题标题】:storing lists that can be edited in a loop?存储可以循环编辑的列表?
【发布时间】:2013-12-31 09:15:06
【问题描述】:

我想在我拥有的列表中获取字符串并将它们转换为适当的枚举。使用 enum.parse 的代码可以做到这一点。我的代码的问题是它在离开循环后不存储 dispoFilters 。解决这个问题的好方法是什么?

// Get Disposition enum
if (model.FilterSet.Dispositions != null)
{
    List<int> dispoFilters = new List<int>();
    for (int i = 0; i < model.FilterSet.Dispositions.Count; i++)
    {
        dispoFilters.Add((int)((RespondentStatus)Enum.Parse(typeof(RespondentStatus), model.FilterSet.Dispositions[i].ToString())));
    }
}

【问题讨论】:

    标签: c# asp.net-mvc for-loop enums


    【解决方案1】:

    离开 IF 语句后,您的代码不会存储 dispoFilters。

    将你的声明上移一点。

    List<int> dispoFilters = new List<int>();
    if (model.FilterSet.Dispositions != null)
    {
        for (int i = 0; i < model.FilterSet.Dispositions.Count; i++)
        {
            dispoFilters.Add((int)((RespondentStatus)Enum.Parse(typeof(RespondentStatus), model.FilterSet.Dispositions[i].ToString())));
        }
    }
    

    Scope 是一个术语,用于定义变量在多长时间和代码的哪些部分可用。通过在 if 语句中声明变量,您在退出 if 时失去了作用域。

    【讨论】:

      【解决方案2】:

      那是因为您在 if 块内定义了 dispoFilters 并且它在它之外将不可用。因此,根据您的需要将其定义在if 之外或上层scope。另请注意,并不是它在循环外不可用(正如您所提到的),它将在循环外可用,但在您的 if 条件内可用。

      List<int> dispoFilters = new List<int>();
      if (model.FilterSet.Dispositions != null)
       {
           for (int i = 0; i < model.FilterSet.Dispositions.Count; i++)
           {
               dispoFilters.Add((int)((RespondentStatus)Enum.Parse(typeof(RespondentStatus), model.FilterSet.Dispositions[i].ToString())));
           }
       }
      

      根据您的代码:

      if (model.FilterSet.Dispositions != null)
           {
               List<int> dispoFilters = new List<int>();
               for (int i = 0; i < model.FilterSet.Dispositions.Count; i++)
               {
                   dispoFilters.Add((int)((RespondentStatus)Enum.Parse(typeof(RespondentStatus), model.FilterSet.Dispositions[i].ToString())));
               }
              //With in the if condition outside the loop you can still access dispoFilters 
           }
      

      【讨论】:

        【解决方案3】:

        其他答案是正确的,但您甚至不必使用 for 循环。以下是您可以执行的操作:

        var dispoFilters = model.FilterSet.Dispositions.ConvertAll(item => 
            (int)((RespondentStatus)Enum.Parse(typeof(RespondentStatus), item.ToString())));
        

        我认为model.FilterSet.DispositionsList;如果没有,您必须在ConvertAll 之前使用toList()

        【讨论】:

          猜你喜欢
          • 2021-10-11
          • 2010-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-23
          • 1970-01-01
          • 1970-01-01
          • 2022-01-08
          相关资源
          最近更新 更多