我想把字符串放在我所拥有的列表中并将它们转换为适当的枚举。使用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())));
}
}
答案 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.Dispositions
是List
;如果没有,则必须在toList()
之前使用ConvertAll
。