C# 无法从交换机循环中的枚举分配值

C# 无法从交换机循环中的枚举分配值,c#,asp.net-mvc,enums,C#,Asp.net Mvc,Enums,在我的模型中,我的枚举如下所示: public enum m_ItemType { Unknown = 0, // Physical = 1, // Logical = 2, } 我有一个方法,它基于另一个具有此枚举值的项目列表构建一个项目列表: private static List<ItemType> BuildListItem(IEnumerable<ItemToSend> listItemToSend) { Li

在我的模型中,我的枚举如下所示:

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;
}
私有静态列表BuildListItem(IEnumerable listItemToSend)
{
List listItemsToReturn=新列表();
foreach(listItemToSend中的变量项)
{
ItemType itemToAdd=新的ItemType();
itemToAdd.Title=item.m_Title;
itemToAdd.Description=item.m_Description;
开关(item.m_ItemType)
{
案例0:
itemToAdd.Type=AnotherEnumValue.Unknown;
打破
案例1:
itemToAdd.Type=另一个新值.Physical;
打破
案例2:
itemToAdd.Type=AnotherEnumValue.Logical;
打破
}    
listItemsToReturn.Add(itemToAdd);
}
返回listItemsToReturn;
}

但是代码没有编译,并且一直告诉我枚举名称此时无效。谁能解释一下原因吗?我不明白。

在您的第一个示例中,枚举名为
m_ItemType
,但应该是
另一个新值


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

在第一个示例中,枚举名为
m_ItemType
,但应该是
另一个新值


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

如果
item.m_ItemType
的数据类型是
m_ItemType
,首先我会将其重命名为更合理的值(
ItemType
)。然后,您需要在交换机的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;
    } 
    ...
}   
//您的枚举
公共枚举项类型
{
未知=0,
    //
物理=1,
    //
逻辑=2,
}
//你的模型
公共类ItemToSend
{
公共ItemType m_ItemType{get;set;}
}
//在你的行动中
私有静态列表BuildListItem(IEnumerable listItemToSend)
{
...
开关(item.m_ItemType)
{
案例项目类型。未知:
itemToAdd.Type=AnotherEnumValue.Unknown;
打破
案例ItemType.Physical:
itemToAdd.Type=另一个新值.Physical;
打破
案例ItemType。逻辑:
itemToAdd.Type=AnotherEnumValue.Logical;
打破
} 
...
}   

如果
item.m_ItemType
的数据类型是
m_ItemType
,首先我会将其重命名为更合理的名称(
ItemType
应该可以工作)。然后,您需要在交换机的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;
    } 
    ...
}   
//您的枚举
公共枚举项类型
{
未知=0,
    //
物理=1,
    //
逻辑=2,
}
//你的模型
公共类ItemToSend
{
公共ItemType m_ItemType{get;set;}
}
//在你的行动中
私有静态列表BuildListItem(IEnumerable listItemToSend)
{
...
开关(item.m_ItemType)
{
案例项目类型。未知:
itemToAdd.Type=AnotherEnumValue.Unknown;
打破
案例ItemType.Physical:
itemToAdd.Type=另一个新值.Physical;
打破
案例ItemType。逻辑:
itemToAdd.Type=AnotherEnumValue.Logical;
打破
} 
...
}   

能否指定编译器发出的确切错误消息?itemToAdd.type
的数据类型是什么?有几件事。将有助于查看您的
ItemType
ItemToSend
模型,而且,Type是一个保留关键字,因此您可能不想将其用作属性name@Steve“无法通过表达式引用类型;”@Sachin哦,呃,我以为枚举根据指定的值返回int,因此,如果值为Type.Unknown,则其值为0?能否指定编译器发出的确切错误消息?
itemToAdd.Type的数据类型是什么。将有助于查看您的
ItemType
ItemToSend
模型,而且,Type是一个保留关键字,因此您可能不想将其用作属性name@Steve“无法通过表达式引用类型;”@Sachin哦,呃,我以为枚举根据指定的值返回int,因此,如果该值为Type.Unknown,则其值将为0?尽管此“可能”有效,但第一个错误仍然存在。是因为我尝试使用枚举值吗?我应该改为使用int吗?我必须看更多的代码才能确定发生了什么。
item.m_ItemType
itemToAdd.type
的数据类型是什么?另外,您是否打算拥有两个几乎相同的枚举(
m_ItemType
AnotherEnumValue
)?我必须承认,我确实不习惯操作枚举,所以这可能就是为什么看起来不合逻辑的原因。在我要添加的项目中,有一个枚举。我认为我需要使用一个枚举来获得几乎相同的值,所以这就是为什么我在另一端构建了一个枚举……这很好,但它可能会导致一些混乱,所以您应该小心谨慎。看看我更新的答案。啊!非常感谢。现在我明白了:我已经根据枚举值创建了一个“get/set”属性,就像您在类中建议的那样,它可以正常工作。但我坦率地承认,这可能会导致混乱,因此我将对整个过程进行重构。尽管这“可能”起作用,但第一个错误仍然存在。是因为我尝试使用枚举值吗?我应该改为使用int吗?我必须看更多的代码才能确定发生了什么。
item.m_ItemType
itemToAdd.type
的数据类型是什么?另外,您是否打算拥有两个几乎相同的枚举(
m_ItemType
另一个新值
)?我必须承认,我真的不习惯