存储可以循环编辑的列表?

时间:2013-12-12 19:22:08

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

我想把字符串放在我所拥有的列表中并将它们转换为适当的枚举。使用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())));
    }
}

3 个答案:

答案 0 :(得分:8)

您的代码在离开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时,您的范围就会丢失。

答案 1 :(得分:5)

多数民众赞成是因为你在dispoFilters区块中定义了if,并且它不会在它之外可用。因此,根据您需要的位置,将其定义在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 
     }

答案 2 :(得分:3)

其他答案都是正确的,但您甚至不必使用for循环。您可以这样做:

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

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