C#如何使这段代码更紧凑(如果,否则如果,否则)

时间:2016-11-21 13:46:21

标签: c# if-statement

我是一年级学生,我们被要求做分配,我想知道是否还有其他办法可以检查用户输入,所以我不需要做所有的if和其他的在每次输入之后或者有什么方法可以循环它并保存6个不同的答案或类似的东西......

active, foo

如果我提出愚蠢的简单问题,请不要生气,但我在网上找到的所有内容都是更加先进的方法....谢谢。

3 个答案:

答案 0 :(得分:7)

我建议初始化字典进行查找,如下所示:

.

然后按如下方式查找字符串:

(?<=^Caused by: ).*?Exception

答案 1 :(得分:0)

您可以使用switch

switch(g0){
    case "H1":
        g0 = 100;
        break;
    case "H2":
        g0 = 88;
        break;
    case "H3":
        g0 = 73;
        break;
    default:
        Console.WriteLine("Wrong Grade Format!");
        break;
}

开关与内部的 if-else 代码类似。在您要检查var的参数中,然后检查每个大小写,其值case "H3"if(g0 == "H3")相同。在:之后和break;之前,如果条件为 true ,则放置您要执行的代码。如果条件的 true ,则开关会转到default:并执行该代码。

答案 2 :(得分:0)

从您的问题判断,您在某种程度上寻找输入中的模式以缩短您的条件。如果是这样,那可能会有点粗糙,因为你真的需要解释用户可能输入的每个输入,并且无论多长时间都是这样做的。

尽管如此,我还是试图通过使用我根据你的代码片段和用户输入分析的模式来缩短条件。

这是我可以为您提供的代码段:

var totalGrade0 = 100;
if (g0.Contains("H")) {
    var gradeVal = Convert.ToInt32(g0.Replace("H", ""));
    var initDeductionSet = 12;
    g0 = totalGrade0.ToString();
    if (gradeVal == 2) {
        g0 = (totalGrade0 - initDeductionSet).ToString();
    }
    if (gradeVal >= 4 && gradeVal <= 6) {
        g0 = (totalGrade0 - (10 * (gradeVal - 2)) + initDeductionSet).ToString();
    }
    if (gradeVal == 7) {
        g0 = (totalGrade0 - 63).ToString();
    }

}

我注意到输入是使用H1,H2,H3来定义等级代码,并根据代码给出相应的等级。而且,等级被扣除了更高的代码(例如H7。虽然我没有在我的代码片段中包含那些O1,O2。只是为了给你一个想法)。使用等级代码中的整数值对我有利,我能够看到一个模式并使用它来自动化演绎过程一点点,有效地减少了条件。这种模式从H4-H6中可以看出,他们将等级减去10分。除此之外,我没有看到任何可能进一步减少这种情况的东西。也许如果你能看到一些在等级代码系统中更明显的模式,你或许可以减少几个等级。

这里的关键是解析用户输入的等级代码(H1,H2等)并提取代码中的整数值。

如果您正在寻找更简洁的if-else条件方法,您可以尝试使用

  

字典/哈希表

  

的switch-case

你还没有遇到的方法我相信。但要知道这些方法不会缩短你的条件。但它们将进一步使您的代码可读。