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;
  }
}