int
никогда не бывает null
, поэтому применять ??
к нему не имеет смысла.
Один из способов добиться того, чего вы хотите, это TryParse
:
int i;
if(!int.TryParse(s, out i))
{
i = 0;
}
Или, так как вы хотите получить 0
или default(int)
, вы можете выбросить if, поскольку выходной параметр TryParse
в случае ошибки уже равен default(int)
:
int i;
int.TryParse(s, out i);
В статье, на которую вы ссылаетесь, нет int
слева от ??
, но int?
. Это сокращение для Nullable<int>
, которое поддерживает null
, поэтому ??
имеет смысл с ним.
int? count = null;
int amount = count ?? default(int); //count is `int?` here and can be null