2013-12-12 44 views
1

我想把我有的列表中的字符串轉換成適當的枚舉。使用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

其他的答案是正確的,但你甚至不必用一個for循環。這裏是你可以做什麼:

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

我assming是model.FilterSet.DispositionsList;如果不是,則必須在ConvertAll之前使用toList()

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時,將失去範圍。

5

那是因爲您已在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 
    } 
相關問題