Вопрос

есть ли какой-нибудь способ вернуть значение 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top