Как я могу использовать, если условие для добавления значений - PullRequest
0 голосов
/ 26 октября 2018

Я хочу получить всего три значения:

когда ни одно из значений не равно 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());

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Создайте консольное приложение и протестируйте приложение ниже.Все, что вам нужно, находится в коде ниже.Примечание. Неправильно направлять строки при минимальной обработке ошибок, также вы можете / будете иметь проблемы с "."или "," десятичные разделители в этих приведениях.- В разных регионах используются разные десятичные разделители, и это может повлиять на качество ваших результатов.

   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);
    }
}
0 голосов
/ 26 октября 2018

Используйте локальную функцию, например, для безопасного анализа данных:

double Parse(string data)
{
    return double.TryParse(data, NumberStyles.AllowDecimalPoint, 
        CultureInfo.InvariantCulture, out double val) ? val : 0;
}
0 голосов
/ 26 октября 2018
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());
}
...