5

How can I use int.TryParse with nullable int?

I am trying to do something like the following, which doesn't compile, obviously.

int? nr1 = int.TryParse(str1, out nr1) ? nr1 : null;

What is the correct way to achieve it?

user7518s
  • 452
  • 1
  • 7
  • 16

2 Answers2

19

Because the out has to be int you need something like:

int temp;
int? nr1 = int.TryParse(str1, out temp) ? temp : default(int?);

Note that I also use default(int?) instead of null because the conditional typing won't work otherwise. ? (int?)temp : null or ? temp : (int?)null would also solve that.

As of C#7 (VS Studio 2017) you can inline the declaration of temp

int? nr1 = int.TryParse(str1, out int temp) ? temp : default(int?);
Jon Hanna
  • 110,372
  • 10
  • 146
  • 251
5

int.tryParse will change the referenced out variable, and return a boolean, which is true if the passed argument could be parsed as an integer.

You're after something like this :

int? int1;
int tempVal;
if (!int.TryParse(str1, out tempVal))
{
    int1 = null;
}
else
{
    int1 = tempVal;
}
Timothy Groote
  • 8,614
  • 26
  • 52