以下是我的代码:
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#
的新手答案 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)
他的回答还可以:
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
,因为它不会多次重复相同的条件。