Метод .NET для синтаксического анализа String с помощью квалификатора типа Long

Я получаю строку от стороннего ПО с квалификатором типа long, например. «1л». Я хочу преобразовать это в Int64, но Int64.TryParse не распознает это как Int64. Есть ли безопасный метод .NET? Хочу не разбираться ...

Спасибо за любую помощь!


person user736570    schedule 25.04.2013    source источник
comment
Вы заменяете L (или l), если это 1) Не первый непробельный символ; и 2) это последний символ или сразу за ним следует пробельный символ.   -  person Jim Mischel    schedule 25.04.2013


Ответы (2)


В простейшем случае это можно сделать так:

string sNum = "1L";
int pos = sNum.IndexOf('L');
if (pos == sNum.Length-1)
{
    sNum = sNum.Substring(0, sNum.Length-1);
}
long num = int64.Parse(sNum);
person Jim Mischel    schedule 25.04.2013
comment
Я не совсем понимаю это преобразование, но если бы L были на первой позиции, Int64.Parse сработало бы? - person Mike Perrenoud; 25.04.2013
comment
@MichaelPerrenoud: Согласно документации, Int64.Parse хочет [whitespace][sign]digits[whitespace]. Не допускается использование описателя типа в начале или в конце. - person Jim Mischel; 25.04.2013
comment
Теперь я понимаю, и поэтому описатель конечного типа (например, L) на самом деле не является стандартным, а скорее всего лишь артефактом того, откуда он исходит. - person Mike Perrenoud; 25.04.2013

Лучшее, что я могу порекомендовать при просмотре, - это использовать регулярное выражение для извлечения или удаления нечисловых символов, а затем для анализа с помощью фреймворка (Convert, Parse или TryParse и т. Д.).

Я переманил это из одного из приведенных ниже вопросов, надеюсь, что это сработает:

var originalString = "9L";
var result = Convert.ToInt64(Regex.Replace(originalString, "[^0-9]", String.Empty));

См. Эти вопросы для получения некоторых примеров (и некоторых, эээ, ... интересных альтернативных подходов):

person GrahamMc    schedule 25.04.2013
comment
Спасибо, я надеялся, что смогу избежать манипуляций со строками, но это сработает. - person user736570; 25.04.2013
comment
Так что превратит 93foobar265 в 93265? Веселье. - person Jim Mischel; 25.04.2013
comment
Ага, Джим, не самое чистое, но лучшее, что я мог найти. Регулярное выражение можно изменить достаточно легко, чтобы заменить только L или l (согласно вашему комментарию), но OP не совсем ясно, какие ограничения или возможные позиции альфа-символов могут быть - person GrahamMc; 25.04.2013
comment
Между прочим, Джим, я думаю, что ваш ответ будет обрабатывать 93foobar265, создав исключение NumberFormatException? Я думаю, что с измененным регулярным выражением этот ответ даст такое же поведение. Это было бы предпочтительнее, если есть способ, которым входящая строка может выглядеть иначе, чем alpha + L ... Как говорит OP, было бы здорово, если бы был метод фреймворка :) - person GrahamMc; 25.04.2013