我有以下代码:
if (testQuestion.Result == "t") { testQuestion.CorrectCount++; }
if (testQuestion.Result == "f") { testQuestion.IncorrectCount--; }
if (testQuestion.Result == "s") { testQuestion.ShownCount++; }
有没有办法可以删除三个if语句的需要?
答案 0 :(得分:4)
由于C#允许切换字符串,因此可以按如下方式使用switch语句:
switch (testQuestion.Result) {
case "t": testQuestion.CorrectCount++; break;
case "f": testQuestion.IncorrectCount--; break;
case "s": testQuestion.ShownCount++; break;
}
您可以在C#here中找到有关switch语句的更多详细信息。
答案 1 :(得分:4)
您可以使用switch声明:
switch (testQuestion.Result)
{
case "t":
testQuestion.CorrectCount++;
break;
case "f":
testQuestion. IncorrectCount--;
break;
case "s":
testQuestion.ShowCount++;
break;
default:
// Result is a different value from what's expected
}
或者,如果您更喜欢更紧凑的公式:
var q = testQuestion;
switch (q.Result)
{
case "t": q.CorrectCount++; break;
case "f": q. IncorrectCount--; break;
case "s": q.ShowCount++; break;
}
我应该提一下,如果你的Result
属性属于Char
类型,那么你应该在值周围使用撇号而不是引号。
编辑:您可能还希望拥有default
语句来处理意外情况。我刚刚将它添加到上面的第一个代码块中。
答案 2 :(得分:3)
另一种方法是使用ternary operator:
testQuestion.CorrectCount += (testQuestion.Result == "t"? 1 : 0);
testQuestion.IncorrectCount += (testQuestion.Result == "f"? -1 : 0);
testQuestion.ShownCount += (testQuestion.Result == "s"? 1 : 0);
答案 3 :(得分:0)
选项2
您可以像在此代码中一样将逻辑包装在属性中。 IMO,这更具可读性。
public class TestQuestion
{
private string _result;
public string Result
{
get
{
return _result;
}
set
{
_result = value;
this.CorrectCount += (this._result == Meta.correctResult ? Meta.incrementCount: 0);
this.IncorrectCount += (this._result == Meta.incorrectResult ? Meta.decrementCount : 0);
this.ShownCount += (this._result == Meta.shownResult ? Meta.incrementCount : 0);
}
}
public int CorrectCount;
public int IncorrectCount;
public int ShownCount;
}
这是Meta的代码 ,这使得在一个地方轻松配置和控制。
public class Meta
{
public static string correctResult = "t";
public static string incorrectResult = "f";
public static string shownResult = "s";
public static int incrementCount = 1;
public static int decrementCount = -1;
}
这就是我在LinqPad中使用它的方式
void Main()
{
TestQuestion testQuestion = new TestQuestion();
testQuestion.Result = "t";
testQuestion.Result = "f";
testQuestion.Result = "s";
testQuestion.Dump();
}
不是更具可读性吗?