如何根据字符串[]数组的顺序从List <>获取Sum()

时间:2019-02-20 23:37:10

标签: c# arraylist sum console-application

我正在尝试根据数组的Sum()获取List<>的{​​{1}}。我尝试了以下方法:

string[]

但是,如果数组的排序方式如下:

private static List<int> sum = new List<int>();
private static int total = 0;
private static string[] ErrorCode = new string[] {"@", "-2", "!"};

private static void Score(string[] ErrorCode)
{
        if (ErrorCode.Contains("@"))
        {
            sum.Add(1);
        }
        if (ErrorCode.Contains("-2"))
        {
            sum.Add(-2);
        }

        if (ErrorCode.Contains("!"))
        {
            sum.Clear();
            sum.Add(5);
        }

        total = sum.Sum(); 
        //This prints total = 5
}

如何获得可以动态打印两个值的结果?因此,这将取决于如何使用ErrorCode输入数组,而不取决于Score方法private static string[] ErrorCode = new string[] {"!", "-2", "@"}; private static void Score(string[] ErrorCode) { if (ErrorCode.Contains("@")) { sum.Add(1); } if (ErrorCode.Contains("-2")) { sum.Add(-2); } if (ErrorCode.Contains("!")) { sum.Clear(); sum.Add(5); } total = sum.Sum(); //This prints total = 5 //but should print total = 4 (because of the order of the array) } 。 非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

在顺序很重要时不要使用Contains,请按顺序处理每个命令:

private static void Score(string[] ErrorCode) {
    total = 0;
    foreach (var ec in ErrorCode) {
        switch (ec) {
            case "@":
                total += 1;
                break;
            case "-2":
                total += -2;
                break;
            case "!":
                total = 5;
                break;
        }
    }
}

您还应该让Score使用局部变量(sum?),并在完成后返回结果。您应该将ErrorCode命名为errorCodes,因为它包含多个代码,因此:

private static int Score(string[] errorCodes) {
    var sum = 0;
    foreach (var ec in errorCodes) {
        switch (ec) {
            case "@":
                sum += 1;
                break;
            case "-2":
                sum += -2;
                break;
            case "!":
                sum = 5;
                break;
        }
    }

    return sum;
}

total = Score(ErrorCodes);