替代if-else

时间:2014-06-05 07:56:36

标签: c# if-statement

以下是我的代码:

int a = 4;
if (a > 3)
{
    Label1.Text = "Hello";
}
else
{
    Label1.Text = "Hi!";
}
//Alternate for if-else
Label1.Text = (a > 3) ? "Hello" : "Hi!";

正如我们所知,if-else的if-else和alternate都给出了相同的输出。我想知道,如果我有多个陈述怎么办?对于实例

int a = 4;
if (a > 3)
{
    Label1.Text = "Hello";
    Label2.Text = "How are you?";
}
else
{
    Label1.Text = "Hi";
    Label2.Text = "How do you do"";
}

那么,有替代方案吗?我相信我可以使用C#提供的东西。在此先感谢。

P.S。我是C#

的新手

8 个答案:

答案 0 :(得分:8)

这可能是最好的解决方案。这很容易阅读,看看你正在做什么。 根据您的代码,即使对于一个语句,使用三元运算符有时也会有点太多。

这里有很多替代品。你可以说很多OOP设计模式本身就是if语句的替代品,但对于这样一个简单的例子来说,没有必要去那么远。

答案 1 :(得分:3)

你已经实现这一点的方式已经很好了。

也许这样的事情可能有所帮助。它将实现代码从if抽象出来,假设这是你想要的:

int a = 4;
if (a > 3)
{
    SetLabelToHello();
}
else
{
    SetLabelToHi();
}

// ....

public void SetLabelToHello()
{
    Label1.Text = "Hello";
    Label2.Text = "How are you?";
}

public void SetLabelToHi()
{
    Label1.Text = "Hi";
    Label2.Text = "How do you do";
}

以这种方式使用方法可以让您轻松地向if条件添加更多语句,同时保持干净,易于维护的代码。

答案 2 :(得分:3)

将作业移至功能

public int SetLabels(string label1text, string label2text)
{
   try
   {
        Label1.Text = label1text;
        Label2.Text = label2text;

        return 0;
   }
   catch
   {
        return 1;
   }
}


var result = a > 3 ? SetLabels("Hello", "How are you?") : SetLabels("Hi!", "How do you do");

答案 3 :(得分:2)

C#是一种命令式语言,所以这就是应该写的方式。没有内置的方法来进行双重赋值,因为C#不支持多个返回值。

保持这样。这很好。

答案 4 :(得分:2)

蒂姆•施梅默特(Tim Schmelter)之前给出了一个答案,但是有一些干部校长并且很难投票。

他的回答还可以:

Label1.Text = a > 3 ? "Hello" : "Hi";
Label2.Text = a > 3 ? "How are you?" : "How do you do?";

如果你对DRY太过分了,那么就这样做吧

bool veryDryCondition = a > 3;
Label1.Text = veryDryCondition ? "Hello" : "Hi";
Label2.Text = veryDryCondition ? "How are you?" : "How do you do?";

虽然在这种情况下使用简单的if仍然是可取的方式。

我使用?:主要是为了提高可读性,如果条件是唯一的并且我想保留单行(代码保留在一行中)以获得更好的可读性。如果条件很常见并且有多个操作 - 使用if通常会更好。

答案 5 :(得分:2)

问:"那么,有替代品吗?"

答:是的,无限数量的替代品。但它并不意味着你必须使用它们......一切都取决于你的背景。

这是另一个奇怪的,可能的解决方案。它有效,但它有意义吗?

Action action;
int a = 4;

if (a > 3)
{
    action = new Action(() => {
        Label1.Text = "Hello";
        Label2.Text = "How are you?";
    });

}
else
{
    action = new Action(() => {
        Label1.Text = "Hi";
        Label2.Text = "How do you do"";
    });
}

action();

答案 6 :(得分:2)

你的问题的答案是否定的,没有替代/更短的方式来写这个。虽然还有其他方法可以做到这一点。

然后导致为什么要使代码更简洁?最好是争取可读性和更好的维护。

int a = 4;
var aIsGreaterThanThree = (a > 3)
if (aIsGreaterThanThree)
{
   SetLabelsToHello();
}
else 
{
   SetLabelsToHi();
}

void SetLablesToHello()
{  
   Label1.Text = "Hello";
   Label2.Text = "How are you?";
}

void SetLabelsToHi() 
{
   Label1.Text = "Hi";
   Label2.Text = "How do you do";
}

此时,根据权限,您可以将if语句更改回速记版本,或从if语句中删除{和}。

答案 7 :(得分:1)

两个标签都需要一个条件运算符?这是不可能的,但有什么不对的:

Label1.Text = a > 3 ? "Hello" : "Hi!";
Label2.Text = a > 3 ? "How are you?" : "How do you do";

如果两个标签不相关且条件可能在将来发生变化,那么第一个标签与另一个标签的不同,那么这种方法更好。否则坚持使用if-else,因为它不会多次重复相同的条件。