C#有一种简单的方法可以替换多个if语句吗?

时间:2014-03-16 14:07:13

标签: c#

我有以下代码:

if (testQuestion.Result == "t") { testQuestion.CorrectCount++; }
if (testQuestion.Result == "f") { testQuestion.IncorrectCount--; }
if (testQuestion.Result == "s") { testQuestion.ShownCount++; }

有没有办法可以删除三个if语句的需要?

4 个答案:

答案 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();

}

不是更具可读性吗?