包含多个案例的多个Switch语句?

时间:2012-06-12 21:00:18

标签: c# switch-statement

我正在尝试编写一个与我在下面的代码中显示的效果类似的switch语句,但(显然),它不起作用。在两个组合框中同时选择一些东西是不可能的。有关如何实现这一点的任何想法?我正在更新一个较旧的程序,我试图不重写大量的代码。

    switch ((cboMAIN.SelectedIndex) || (cboMAINalternate.SelectedIndex))
            {
                case 0:
                    OutputString1 = "A";
                    break;
                case 1:
                    OutputString1 = "C";
                    break;
                case 2:
                    OutputString1 = "E";
                    break;
                case 3:
                    OutputString1 = "F";
                    break;
                case 4:
                    OutputString1 = "I";
                    break;
                case 5:
                    OutputString1 = "J";
                    break;
                case 6:
                    OutputString1 = "K";
                    break;
            }

5 个答案:

答案 0 :(得分:2)

尝试使用

switch ((cboMAIN.SelectedIndex > -1) ? cboMAIN.SelectedIndex : cboMAINalternate.SelectedIndex) 
{

答案 1 :(得分:1)

不,那是不可能的(至少不是你这样做的方式)。

问题是,你想要实现什么目标?如果你有某种切换方式在两个索引之间切换,你可以这样做:

bool useAlternative = ...;
switch(useAlternative ? cboMAINalternate.SelectedIndex : cboMAIN.Selectedindex) {
    // ...
}

答案 2 :(得分:0)

select元素中始终有一个选定的项目,因此您必须检查您认为没有选择的项目,例如第一项:

var item = cboMAIN.SelectedIndex;
if (item = 0) item = cboMAINalternate.SelectedIndex;

switch (item) {
  ...

答案 3 :(得分:0)

可能是最简洁的方式:

switch (Math.Max(cboMAIN.SelectedIndex, cboMAINalternate.SelectedIndex))
{
    // ...
}

答案 4 :(得分:0)

根据MSDN,如果SelectedIndex上的选择为空,则-1将返回ComboBox

以下代码应选择带有选择的ComboBox并通过您的switch语句,否则如果两者都没有选择则会失败:

ComboBox comboBoxToUse;

if (cboMAIN.SelectedIndex > -1)
{
    comboBoxToUse = cboMAIN;
}
else if (cboMAINalternate.SelectedIndex > -1)
{
    comboBoxToUse = cboMAINalternate;
}
else
{
    throw new InvalidOperationException("Neither combo box contains a selection.");
}

switch (comboBoxToUse.SelectedIndex)
{
    ...
}

如果两个ComboBox都有选择,您可能还想抛出异常。