int.TryParse = null, если не числовой?
Вопрос
есть ли какой-нибудь способ вернуть значение null, если он не может разобрать строку в int?
с:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
получение "не удается преобразовать из 'out string' в 'out int'
что же делать?
Редактировать:
Больше не актуально из-за asp.net ограничений - это способ решения проблемы
/М
Решение
Прежде всего, почему вы пытаетесь преобразовать строку в целое число и вставить результат обратно в строку?
Сигнатура метода
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;
}
}
Другие советы
Вот правильное использование Int32.TryParse
:
int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
value = dummy;
}
else {
value = null;
}
return value;
Как насчет этого?
public int? ParseToNull(string categoryId)
{
int id;
return int.TryParse(categoryId, out id) ? (int?)id : null;
}
Самый простой...
Int N = Int.TryParse(somestring, N) ? N : 0;
Это работает, потому что оценивается слева направо.Нуль не так-то просто.
TryParse
вернет false, если строку невозможно проанализировать.Вы можете использовать этот факт для возврата либо проанализированного значения, либо нуля.В любом случае, я предполагаю, что вы собираетесь вернуться int?
из вашего метода, то это будет примерно так:
public int? ParseInt(string categoryID)
{
int theIntValue;
bool parseOk = int.TryParse(categoryID, out theIntValue);
if(parseOk) {
return theIntValue;
} else {
return null;
}
}
Хотите сделать что-то подобное?
public int? Parse(string categoryID)
{
int value;
if (int.TryParse(categoryID, out value))
{
return value;
}
else
{
return null;
}
}
Int — это тип значения, что означает, что не существует такого понятия, как null int.Так что нет, TryParse никогда не изменит параметр out, чтобы он стал нулевым.
Но проблема, с которой вы столкнулись, заключается в том, что вы передаете строку в параметр out TryParse, когда ожидается целое число.
Вам нужно что-то вроде этого...
Int categoryID = 0;
string strCategoryID = "somestringmaybeitsaninteger";
int.TryParse(strCategoryID, out categoryID);
** этот ответ был отклонен большинством голосов ** Хотя это возможное решение - оно плохое с точки зрения производительности и, вероятно, не является хорошим выбором для программирования.
Я не буду удалять это, так как предполагаю, что многие программисты могут не знать об этом, поэтому вот пример того, как этого не делать:
используй "попробуй и поймай"
try
{
res = Int32.Parse(strVAR)
}
catch(exception ex)
{
return null;
}