【问题标题】:A switch expression and an operator errorswitch 表达式和运算符错误
【发布时间】:2017-03-01 21:22:12
【问题描述】:

我有两行代码给了我错误:

private void combobox1_SelectedIndexChanged(object sender, EventArgs e)
        {
    switch (combobox1.SelectedValue)
                {
                    case 0:
                        var item = items.Where(category => category.CategoryIndex == 0);

                        foreach (var i in item)
                        {
                            listbox.Items.Add(new Items { CategoryIndex = i.CategoryIndex, ItemDesc = i.ItemDesc, ItemName = i.ItemName });
                        }
                        break;


                    case 1:
                        item = items.Where(category => category.CategoryIndex == 1);

                        foreach (var i in item)
                        {
                            listbox.Items.Add(new Items { CategoryIndex = i.CategoryIndex, ItemDesc = i.ItemDesc, ItemName = i.ItemName });
                        }
                        break;

这是第二个:

 private void listbox_SelectedIndexChanged(object sender, EventArgs e)
        {
            var item = items.Where(category => category.CategoryIndex == listbox.SelectedValue && (itemName => itemName.ItemName == listbox.SelectedItem.ToString()));

            listbox.Text = item.ItemName;
            desrciption_label.Text = item.ItemDesc;     
        }

第一个代码中的错误在

switch (combobox.SelectedValue)

错误表明:

switch 表达式或 case 标签必须是 bool、char、string、integral、enum 或对应的可空类型_

第二个代码中的错误在

category.CategoryIndex == listbox.SelectedValue

此错误表明:

运算符“==”不能应用于“int”和“object”类型的操作数

如何解决这些问题?

注意:这里有更多很多代码,因为它太大了,我将其省略,但如果需要以前的代码,请通知我这个

【问题讨论】:

  • 你不能在这样的布尔表达式中使用lamba
  • 你应该使用SelectedIndex而不是SelectedValue吗?
  • SelectedValue 是对象类型 - SelectedIndex 呢?

标签: c# winforms


【解决方案1】:

在这两种情况下,您都需要将 combobox.SelectedValue 转换为其他内容,即

int choice = (int)combobox.SelectedValue;

取决于SelectedValue 是什么类型的东西。

这是因为combobox.SelectedValueobject,所以您需要将其转换为您的数据类型。 See here 了解 ComboBox 属性的详细信息。

【讨论】:

    【解决方案2】:
    [BrowsableAttribute(false)]
    [BindableAttribute(true)]
    public ***object*** SelectedValue { get; set; }`
    

    请参阅here 了解更多信息。

    您将object 传递给开关,但大小写是整数。您需要将该选定值解析为整数。也许直接投射会起作用,但我不知道那个组合框中有什么。

    【讨论】:

      【解决方案3】:

      错误是不言自明的。 第一个来自SelectedValue 返回一个Object,这在switch 语句中是不允许的。您很可能应该使用SelectedIndex
      第二个意思是你不能比较intObject
      CategoryIndex是一个int,你不能把它和SelectedValue比较,这是一个对象,就像第一种情况一样.再次使用 SelectedIndex 应该可以解决它。
      如果 SelectedValue 实际上是您应该使用的属性(例如在数据绑定之后),请将对象转换为 int 以获得正确的类型(或解析)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 2020-01-14
        • 1970-01-01
        • 2011-07-21
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多