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;
}

但是代码没有编译并一直告诉我枚举名称此时无效。谁能解释我为什么?我不明白。

4

2 回答 2

2

如果数据类型item.m_ItemTypem_ItemType,首先我会将其重命名为更明智的名称(ItemType应该可以)。然后,您需要在 switch 的 case 语句中使用该名称。试试这个:

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

// your model
public class ItemToSend
{
    public 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;
    } 
    ...
}   
于 2013-03-20T14:29:20.883 回答
1

在您的第一个示例中,枚举被命名m_ItemType,但应该是AnotherEnumValue

因此,在该行switch (item.m_ItemType)中,点后面的值被解释为类型名称,而不是字段。

于 2013-03-20T14:27:03.750 回答