如何将一些虚拟值设置为枚举?



我从foreach循环中获取枚举的值。这些枚举值在某些循环中使用。所以我不能引入新的枚举值。代码如下。

enum Appraiser{A11,A12,A13,A14};
Appraiser selected_Appraiser = null;
foreach(var key in AppraiserStruct.appraisers.Keys)
if (selected_ComboBox.Text.ToLower() == key.ToString().ToLower())
{
selected_Appraiser = key;
break;
}
int min = dictionary[selected_Appraiser].min;

现在,可视化工作室使用未初始化的变量selected_Appraiser给出错误。

1(但是如果我selected_Appraiser设置为 null。这是说 null 不能分配给值类型。

2(如果我把它做成

Appraiser? selected_Appraiser = null;

那么就是说评估师?不能转换为评估师。谁能说出如何实现这一目标?

注意:我使用的是VS 2008 c#速成版。

可以使用default运算符分配Enum成员的默认值

Appraiser selected_Appraiser = default(Appraiser);

它将selected_Appraiser设置为第一个Appraiser成员,即A11。根据 MSDN

枚举类型 E 的默认值是 表达式 (E(0,即使零没有相应的枚举 成员。

默认情况下,枚举成员的常量值的类型为int,从零开始,按照定义顺序增加 1。您也可以从 1 开始计数,如果常量值对您无关紧要

enum Appraiser
{
A11 = 1,
A12,
A13,
A14
}

但这里更好的方法是添加到Appraiser一些默认值,如None并使用它。它有助于确保找到某些值的逻辑正常工作,而不是使用默认值

enum Appraiser {A11, A12, A13, A14, None};
Appraiser selected_Appraiser = Appraiser.None;
...
//value is found
if(selected_Appraiser != Appraiser.None)
{
}

求解无法将评估器转换为评估器? 要读取可为空的变量的值,请使用 value 属性。 例如selected_Appraiser.值 == 评估员.A11

Appraiser

枚举默认使用int基础类型,并且具有从 0 到 3 的命名值:

enum Appraiser
{
A11, // 0
A12, // 1
A13, // 2
A14  // 3
};

您可以选择另一个未使用的int值并强制转换为Appraiser。它不必被命名。

Appraiser selected_Appraiser = (Appraiser)(-1);

最新更新