Long.Parse() С#

Как бы преобразовать строку, например "-100,100", в С#.

В настоящее время у меня есть строка кода, которая

long xi = long.Parse(x, System.Globalization.NumberStyles.AllowThousands);

но это прерывается, когда x является "отрицательным числом".

Мой подход:

long xi = long.Parse("-100,253,1", 
System.Globalization.NumberStyles.AllowLeadingSign & System.Globalization.NumberStyles.AllowThousands);

был ошибочным, поскольку он сломался.

Ответ 1

дайте это go:

long xi = long.Parse(x, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.AllowLeadingSign);

Возможно, потому, что вы объявляете флаги, вам может потребоваться объявить все возможные флаги, которые будут удалены. Я только что подтвердил этот код как работающий в тестовом проекте с использованием заданного строкового значения в вопросе. Дайте мне знать, если это соответствует вашим требованиям. При объявлении нескольких флагов в одном параметре используйте | вместо &

изменить: http://msdn.microsoft.com/en-us/library/cc138362.aspx Найдите объяснение разных побитовых операторов в заголовке "Перечисления как битовые флаги" (это было труднее найти, чем я думал).

Ответ 2

Я бы использовал TryParse вместо Parse, чтобы избежать исключений, т.е.

long xi;
if (long.TryParse(numberString, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.AllowLeadingSign, null, out xi))
    {
        // OK, use xi
    }
    else
    {
        // not valid string, xi is 0
    }