我想总共获得三个值:
当所有值都不为null
时,总计将成功计算,但是当一个或多个值为null
时
它返回错误:
“输入字符串的格式不正确”
下面是代码:
double TotalVar = double.Parse(ExScore.Tables[0].Rows[i]["CAT1"].ToString()) +
double.Parse(ExScore.Tables[0].Rows[i]["CAT2"].ToString()) +
double.Parse(ExScore.Tables[0].Rows[i]["CAT3"].ToString()) +
double.Parse(ExScore.Tables[0].Rows[i]["EXAM"].ToString());
答案 0 :(得分:2)
使用这样的本地函数来安全地解析数据:
double Parse(string data)
{
return double.TryParse(data, NumberStyles.AllowDecimalPoint,
CultureInfo.InvariantCulture, out double val) ? val : 0;
}
答案 1 :(得分:0)
if(ExScore == null || ExScore.Tables[0] == null ||
IsNullOrEmpty(ExScore.Tables[0].Rows[i]["CAT1"]) ||
IsNullOrEmpty(ExScore.Tables[0].Rows[i]["CAT2"]) ||
IsNullOrEmpty(ExScore.Tables[0].Rows[i]["CAT3"]) ||
IsNullOrEmpty(ExScore.Tables[0].Rows[i]["EXAM"])
)
{
//throw exception
//set value by default
}
//calcul normally
public bool IsNullOrEmpty(object value)
{
return value == null || string.IsNullOrEmpty(value.ToString());
}
答案 2 :(得分:0)
创建一个控制台应用程序并在下面测试该应用程序。您需要的所有内容都在下面的代码中。注意:在没有最小限度的错误处理的情况下,直接转换字符串是很不好的,否则您可能会/也将遇到“。”问题。或这些转换中的“,”小数点分隔符。 -不同的区域使用不同的小数点分隔符,这会影响结果的质量。
class Program
{
static void Main(string[] args)
{
//SumValues(
//ExScore.Tables[0].Rows[i]["CAT2"].ToString(),
//ExScore.Tables[0].Rows[i]["CAT3"].ToString(),
//ExScore.Tables[0].Rows[i]["EXAM"].ToString()
//);
Console.WriteLine(SumValues("100,32", "100,08", "100,10",null));
Console.WriteLine(SumValues("abcsdf", "ba123", "100,10", null));
Console.WriteLine(SumValues("100,32", "100,08", "100,10", null));
Console.ReadLine();
}
//simple function that will try to sum any number of strings you pass
public static double SumValues(params string[] values)
{
double sum=0;
foreach (var item in values)
{
//if the string is null, empty or white space, proceed to the next iteration in the loop
if (string.IsNullOrWhiteSpace(item))
continue;
if (IsNumeric(item))
sum += double.Parse(item);
}
return sum;
}
//Minimal 'error handling' function to avoid exceptions parsing strings
public static bool IsNumeric(string s)
{
double output;
return double.TryParse(s, out output);
}
}