我正在尝试根据数组的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)
}
。
非常感谢您的帮助!
答案 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);