【问题标题】:C# -- Encapsulate Enum, and retrieve its values from a ComboBoxC# -- 封装 Enum,并从 ComboBox 中检索其值
【发布时间】:2017-12-28 12:42:34
【问题描述】:

我有一个简单的枚举:

    public enum Status
    {
        sad,
        happy
    };

    protected Status status;

我已成功将其值绑定到组合框:

        cmbStatus.DataSource = Enum.GetValues(typeof(StatusClass.Status));

我现在希望组合框的选定项/值/索引是可检索的。但我遇到了麻烦。我尝试封装枚举,然后检索它的值,如下所示:

    public Status StatusType
    {
        get { return status; }
        set { stats = value; }
    }

        person.StatusType = cmbStatus.SelectedItem.ToString();

这给了我这个错误:“无法将类型'字符串'隐式转换为 StatusClass.Status.Status'。

我尝试过像这样获取枚举名称(例如“悲伤”和“快乐”作为文本而不是其值)(但不确定如何封装它,也不确定它是否有效):

string statusType = Enum.GetName(typeof(Status), status);

如果我可以封装这个,也许我会解决我的问题。在这一点上我很难过;我是新手。真诚感谢任何帮助。希望这一切都有意义,并提供足够的信息。谢谢。

【问题讨论】:

    标签: c# enums combobox


    【解决方案1】:

    您可以将值解析回来:

    Status status = (Status)Enum.Parse(typeof(Status), "sad");
    

    或者(C# 7):

    Enum.TryParse<Status>("sad", true, out Status status);
    // Or: Enum.TryParse<Status>("sad", true, out var status);
    // Use "status variable" further
    

    【讨论】:

    • EnumTryParse? :D,“曾经我是盲人,但现在我可以看到”约翰第 9 章 25 章,我注意到你很活跃,结帐如果你有一些 extra time
    • @Yollo 是的,C# 7 的 TryParse 很合适 :) 我会看看你的问题。
    • @Yollo 我已经回答了这个问题
    【解决方案2】:

    GetValues 返回枚举中所有值的列表(sad (0)happy (1))。

    因此,cmbStatus.SelectedItem 已经包含您需要的枚举值,您只需将其静态转换回正确的类型:

    person.StatusType = (Status)cmbStatus.SelectedItem;
    

    【讨论】:

    • 非常感谢。这就说得通了。您的代码有效。这对我学习很有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多