0

我从 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;

现在 Visual Studio 使用未初始化的变量 selected_Appraiser 给出错误。

1)但如果我将 selected_Appraiser 设置为空。就是说 null 不能分配给值类型。

2)如果我做到了

Appraiser? selected_Appraiser = null;

那么它是说鉴定师?不能转为鉴定人。有人可以说如何实现这一目标吗?

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

4

3 回答 3

1

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

Appraiser selected_Appraiser = default(Appraiser);

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

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

默认情况下,枚举成员的常量值是类型int,从零开始,按照定义顺序加一。如果常数值对您来说无关紧要,您也可以从 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)
{
}
于 2019-12-24T11:19:21.377 回答
0

Appraiserenumint默认使用底层类型,命名值从 0 到 3:

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

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

Appraiser selected_Appraiser = (Appraiser)(-1);
于 2019-12-24T11:28:44.823 回答
0

解决不能转换Appraiser?into Appraiser:要读取可为空变量的值,请使用 value 属性。EG selected_Appraiser.Value == Appraiser.A11

于 2019-12-24T11:36:37.837 回答