Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多个案例的多个Switch语句?_C#_Switch Statement - Fatal编程技术网

C# 具有多个案例的多个Switch语句?

C# 具有多个案例的多个Switch语句?,c#,switch-statement,C#,Switch Statement,我正在尝试编写一个switch语句,该语句的效果与我在下面代码中显示的类似,但是(显然)它不起作用。不可能同时在两个组合框中选择某些内容。你有没有想过如何做到这一点?我正在更新一个较旧的程序,并试图不重新编写大量代码 switch ((cboMAIN.SelectedIndex) || (cboMAINalternate.SelectedIndex)) { case 0: OutputStri

我正在尝试编写一个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;
            }
试用

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

switch ((cboMAIN.SelectedIndex > -1) ? cboMAIN.SelectedIndex : cboMAINalternate.SelectedIndex) 
{
不,那是不可能的(至少不是你现在的方式)

问题是,你想要实现什么?如果您想在两个索引之间进行某种切换,可以这样做:

bool useAlternative = ...;
switch(useAlternative ? cboMAINalternate.SelectedIndex : cboMAIN.Selectedindex) {
    // ...
}
不,那是不可能的(至少不是你现在的方式)

问题是,你想要实现什么?如果您想在两个索引之间进行某种切换,可以这样做:

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

在选择元素中总是有一个被选中的项目,所以你必须检查一个你认为没有选择的项目,例如第一个项目:

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

switch (item) {
  ...

在选择元素中总是有一个被选中的项目,所以你必须检查一个你认为没有选择的项目,例如第一个项目:

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

switch (item) {
  ...

可能是最简洁的方式:

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

可能是最简洁的方式:

switch (Math.Max(cboMAIN.SelectedIndex, cboMAINalternate.SelectedIndex))
{
    // ...
}
根据,
SelectedIndex
将返回
-1
,如果
组合框上的选择为空

下面的代码应该选择一个带有选择项的组合框
,并检查您的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)
{
    ...
}
如果两个
组合框
都有选择,您可能还希望抛出异常。

根据,
如果组合框
上的选择为空,
SelectedIndex
将返回
-1

下面的代码应该选择一个带有选择项的组合框,并检查您的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
e都有一个选择,您可能还想抛出一个异常。

这是有效的。我是编程新手;我以前从未使用过内联IF语句。很酷的解决方案@Dancalahan根据您的逻辑,其中一个总是有效的,使用内联条件检查主条件是有意义的;如果其值未分级,请使用替代选项。:-)我相信0是一个有效的索引;我想应该是
cboMAIN.SelectedIndex>-1
。看,我最终不得不把它改成-1。除此之外,它工作得很好,但是,它工作得很好。我是编程新手;我以前从未使用过内联IF语句。很酷的解决方案@Dancalahan根据您的逻辑,其中一个总是有效的,使用内联条件检查主条件是有意义的;如果其值未分级,请使用替代选项。:-)我相信0是一个有效的索引;我想应该是
cboMAIN.SelectedIndex>-1
。看,我最终不得不把它改成-1。除此之外,它工作得还不错。