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
和另一个新值
)?我必须承认,我真的不习惯