1

我有时需要将 int 的值设置为 null,有时需要设置为实际值。问题是我需要将该值存储在 SAME 变量中,而不是创建另一个。

int? year;
if(something)
   year = null;
else
   int.tryParse("some string", out year);

“某些字符串”始终是有效的 int,但问题是我不能在 int 上使用 int.tryParse?如何解决这个问题?

4

8 回答 8

9

如果你的字符串总是一个有效的整数,你应该只使用该Parse方法。

year = int.Parse("some string");

如果它不是一个有效的整数,你会得到一个FormatExceptionor OverflowException(不像TryParse,它只返回false)。

于 2012-06-13T20:52:30.367 回答
1

您可以使用 Convert.ToInt32(year)。

于 2012-06-13T20:54:09.923 回答
1

你可以试试这个:

public class NullInt
{
    public void ParseInt(string someString, ref int? someInt)
    {
        int i;

        if (int.TryParse(someString, out i))
        {
            someInt = i;
        }
    }
}

并使用有点像:

NullInt someInt = new NullInt();
int? targetInt = null;
someInt.ParseInt("42", ref targetInt);
于 2012-06-13T21:02:54.670 回答
0

如果“某些字符串”始终是有效的 int,那么您可以使用System.Convert.ToInt32System.Int32.Parse将其转换为 int

于 2012-06-13T20:53:46.507 回答
0

int.tryParse 返回一个布尔值,而不仅仅是输出值 - 你也可以这样做:

int year;
int? finalYear;
if(int.TryParse("some string", out year))
    finalYear = year;

否则,如果“某些字符串”总是返回一个有效的 int,为什么不这样做

int? year = int.Parse("some string");
于 2012-06-27T06:16:05.940 回答
0
public static class StringExtensions
{
    public static int? AsInt(this string input)
    {
        int number;
        if (int.TryParse(input, out number))
        {
            return number;
        }

        return null;
    }
}

用法:year = someString.AsInt();

于 2014-11-06T14:46:05.340 回答
-1

这似乎也有效:

int? year;
    if (something)
       year = null;
    else
    {
       int _year;
       int.TryParse(year.SelectedItem.Value, out _year);
       year = _year;
    }
于 2012-06-13T21:06:09.950 回答
-2

添加一些错误检测:

try
{
   year = int.Parse("some string");
}
catch()
{
   year = null;
}
于 2012-06-13T20:57:03.110 回答