Int.TryParse = null, если не числовое?
есть ли какой-нибудь способ возврата null, если он не может разобрать строку для int?
с:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
get "не может преобразовать из 'out string' в 'out int'
что делать?
EDIT:
Больше не актуально из-за ограничений asp.net - это способ решить проблему.
/М
Ответы
Ответ 1
Прежде всего, почему вы пытаетесь разобрать строку в int и вставить результат обратно в строку?
Подпись метода
bool int.TryParse(string, out int)
поэтому вам нужно указать переменную типа int
в качестве второго аргумента. Это также означает, что вы не получите null
, если синтаксический анализ завершится неудачно, вместо этого метод просто вернет false
. Но вы можете легко собрать это вместе:
int? TryParse2(string s) {
int i;
if (!int.TryParse(s, out i)) {
return null;
} else {
return i;
}
}
Ответ 2
Здесь правильное использование Int32.TryParse
:
int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
value = dummy;
}
else {
value = null;
}
return value;
Ответ 3
Как насчет этого?
public int? ParseToNull(string categoryId)
{
int id;
return int.TryParse(categoryId, out id) ? (int?)id : null;
}
Ответ 4
Самый простой и однострочный...
int N = int.TryParse(somestring, out N) ? N : 0;
Это работает, потому что оно оценивается слева направо. Нуль не так просто.
Ответ 5
** этот ответ был сильно проголосован **
Хотя это возможное решение - это плохой показатель производительности, и, вероятно, не очень хороший выбор для программирования.
Я не удалю его, поскольку, как я полагаю, многие программисты могут не знать об этом, вот пример того, как не делать ничего:
использовать try и catch
try
{
res = Int32.Parse(strVAR)
}
catch(exception ex)
{
return null;
}
Ответ 6
Int - это тип значения, который означает, что нет такой вещи, как null int. Так что нет, TryParse никогда не изменит параметр out так, чтобы он был нулевым.
Но проблема заключается в том, что вы передаете строку в параметр out TryParse, когда он ожидает целое число.
Вам нужно что-то вроде этого...
Int categoryID = 0;
string strCategoryID = "somestringmaybeitsaninteger";
int.TryParse(strCategoryID, out categoryID);
Ответ 7
TryParse
вернет false, если строка не может быть проанализирована. Вы можете использовать этот факт, чтобы вернуть либо разобранное значение, либо null. В любом случае, я предполагаю, что вы намерены вернуть int?
из своего метода, тогда это будет примерно так:
public int? ParseInt(string categoryID)
{
int theIntValue;
bool parseOk = int.TryParse(categoryID, out theIntValue);
if(parseOk) {
return theIntValue;
} else {
return null;
}
}
Ответ 8
Вы хотите сделать что-то вроде этого?
public int? Parse(string categoryID)
{
int value;
if (int.TryParse(categoryID, out value))
{
return value;
}
else
{
return null;
}
}