2013-03-20 18 views
0

在我的模型,我有這樣的枚舉,看起來像這樣:遇到問題從一個枚舉的開關回路分配一個值

public enum m_ItemType 
{ 
    Unknown = 0, 
    // 
    Physical = 1, 
    // 
    Logical = 2, 
} 

而且我還基於另一個這種方法,建立項目清單具有此枚舉值的項目列表:

private static List<ItemType> BuildListItem(IEnumerable<ItemToSend> listItemToSend) 
{ 
    List<ItemType> listItemsToReturn = new List<ItemType>(); 

    foreach (var item in listItemToSend) 
    { 
      ItemType itemToAdd = new ItemType(); 

      itemToAdd.Title = item.m_Title; 
      itemToAdd.Description = item.m_Description; 

      switch (item.m_ItemType) 
      { 
       case 0: 
       itemToAdd.Type = AnotherEnumValue.Unknown; 
       break; 
       case 1: 
       itemToAdd.Type = AnotherEnumValue.Physical; 
       break; 
       case 2: 
       itemToAdd.Type = AnotherEnumValue.Logical; 
       break; 
      }  

      listItemsToReturn.Add(itemToAdd); 
    } 

    return listItemsToReturn; 
} 

但是代碼不會編譯並且一直告訴我枚舉名稱在此時無效。任何人都能解釋我爲什麼?我不明白。

+2

你能指定編譯器發出的確切錯誤信息嗎? – Steve 2013-03-20 14:26:07

+0

'itemToAdd.Type'的數據類型是什麼? – Sachin 2013-03-20 14:26:52

+0

幾件事情。將有助於查看您的ItemType和ItemToSend模型,並且Type也是保留關鍵字,因此您可能不希望將其用作屬性名稱 – musefan 2013-03-20 14:27:05

回答

2

如果item.m_ItemType的數據類型是m_ItemType,首先我會將其重命名爲更合理一些(ItemType應該工作)。然後,您需要在交換機的case語句中使用該名稱。試試這個

// your enum 
public enum ItemType 
{ 
    Unknown = 0, 
    // 
    Physical = 1, 
    // 
    Logical = 2, 
} 

// your model 
public class ItemToSend 
{ 
    pubic ItemType m_ItemType { get; set; } 
} 

// in your action 
private static List<ItemType> BuildListItem(IEnumerable<ItemToSend> listItemToSend) 
{ 
    ... 
     switch (item.m_ItemType) 
     { 
      case ItemType.Unknown: 
      itemToAdd.Type = AnotherEnumValue.Unknown; 
      break; 
      case ItemType.Physical: 
      itemToAdd.Type = AnotherEnumValue.Physical; 
      break; 
      case ItemType.Logical: 
      itemToAdd.Type = AnotherEnumValue.Logical; 
      break; 
     } 
    ... 
} 
+0

雖然這個「可以」工作,但第一個錯誤仍然存​​在。是否因爲我嘗試使用枚舉值?我應該使用int嗎? – hsim 2013-03-20 14:30:26

+0

我不得不看更多的代碼來確定發生了什麼事情。 'item.m_ItemType'和'itemToAdd.Type'的數據類型是什麼?此外,你是否打算*有兩個幾乎相同的枚舉('m_ItemType'和'AnotherEnumValue')? – 2013-03-20 14:32:11

+0

我必須承認我真的不習慣操縱枚舉,所以也許這就是爲什麼它看起來不合邏輯。 在我的itemToAdd中,有一個枚舉。我認爲我需要使用一個枚舉具有幾乎相同的值,所以這就是爲什麼我在另一邊建立了一個枚舉... – hsim 2013-03-20 14:35:42

1

在第一個示例中,枚舉被命名爲m_ItemType,但應該是AnotherEnumValue

因此,在行switch (item.m_ItemType)點後面的值被解釋爲類型名稱,而不是字段。

+0

我不能這樣做,因爲編譯器說「預期整型的值」。我雖然一個枚舉總是會返回一個整數值? – hsim 2013-03-20 14:39:28

+0

請爲'enum'本身和包含該枚舉值的字段使用不同的名稱。這可以澄清很多情況。 – Impworks 2013-03-20 14:46:52