C# 编写if-else块的更好方法
我有下面的代码示例代码,非常好用。 我只是想,如果有其他更好的方法,我们可以用更少的代码更准确地编写下面的代码片段C# 编写if-else块的更好方法,c#,.net,if-statement,C#,.net,If Statement,我有下面的代码示例代码,非常好用。 我只是想,如果有其他更好的方法,我们可以用更少的代码更准确地编写下面的代码片段 if(language == "English") { if(Student_id == 0) { someFunction(); } else { if(getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0)
if(language == "English")
{
if(Student_id == 0)
{
someFunction();
}
else
{
if(getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0)
{
someFunction();
}
}
}
另外,请注意,如果Student_id为0,getMarksStudent_id将抛出错误有关更复杂的场景,请查看
我对你的情况的建议是:
使用嵌套较少的if-else块写入
一种方法是通过反转条件和
尽可能提前归还
在您的案例中,将条件与相同的操作组合为someFunction
利用中实现的,也可以用许多其他编程语言实现的,正如在他的评论中所指出的
if(language != "English")
return; //assuming nothing below
if(Student_id == 0 || getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0)
someFunction(); //if someFunction is identical, this can be done
但是,如果要检查其他语言,或者如果要独立于基于language==English的操作执行某些操作,则不应返回If language!=英文声明:
if(language == "English") {
if(Student_id == 0 || getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0)
someFunction(); //if someFunction is identical, this can be done
}
//Something else which must be done
编辑问题后进行编辑:
对于附加条件,您可以简单地将其放在Student_id==0之后,因为C总是首先计算最左边的if条件
举例说明:对于您的案例,这是可以的:
if(Student_id == 0 || getMarks(Student_id) > 50){
//if Student_id == 0 is true, then getMarks(Student_id) wouldn't get evaluated
}
但这并不好:
就可读性而言,有时为您的条件提供可读的名称会有所帮助:
var languageIsEnglish = language == "English";
var studentIdIsNotSet = Student_id == 0;
var hasMoreThanOneSubject = subjectCount > 1;
var hasProjects = projectCount > 0;
if(languageIsEnglish && (studentIdIsNotSet || (hasMoreThanOneSubject || hasProjects )))
{
someFunction();
}
这可能有效
if(language == "English" && (Student_id == 0 || getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0))
{
someFunction();
}
else块不提供任何替代方法,实际上调用了相同的函数。在这种情况下,不需要另一个if块。如果第一个if块没有其他的,如果我认为你可以这样写在一行中
if(language == "English" && (Student_id == 0 || (getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0)))
someFunction();
if(language == "English")
{
if(Student_id == 0 || getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0)
someFunction();
}
else
{
}
如果还有别的办法,你可以这样做
if(language == "English" && (Student_id == 0 || (getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0)))
someFunction();
if(language == "English")
{
if(Student_id == 0 || getMarks(Student_id) > 50 || subjectCount > 1 || projectCount > 0)
someFunction();
}
else
{
}
这更适合于。是someFunction;两行中的功能相同?@nvoigt是的,这是相同的功能我很抱歉!!我在代码中遗漏了一个条件。请看我的编辑,我道歉!!我在代码中遗漏了一个条件。请看我的编辑是的。反转if以减少嵌套是一种好方法+1.@user2946329啊,是的。我也喜欢这个把戏@MicrosoftDN如果Student_id==0,则getMarksStudent_id将不会得到评估。。。这只是C语言特有的行为,我想其他语言会有所不同languages@Martheen我懂了。。。我还记得我以前的日子,那时我必须用C为C8051微控制器编码,至少在那个时候是不受支持的;这里,如果Student_id为0,则getMarks不会执行getMarksStudent_id,因为如果Student_id为0,则不会计算其他条件。