我有时需要将int的值设置为null,有时设置为实际值。 问题是我需要将该值存储在SAME变量中,而不是创建另一个。
int? year;
if(something)
year = null;
else
int.tryParse("some string", out year);
“some string”总是一个有效的int,但问题是我不能在int上使用int.tryParse? 如何解决这个问题?
答案 0 :(得分:8)
如果您的字符串始终是有效整数,则应使用Parse
方法。
year = int.Parse("some string");
如果它不是有效整数,您将获得FormatException
或OverflowException
(与TryParse
不同,后者仅返回false
)。
答案 1 :(得分:1)
您可以使用Convert.ToInt32(year)。
答案 2 :(得分: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);
答案 3 :(得分:0)
如果"某些字符串"永远是一个有效的int,然后您可以使用System.Convert.ToInt32或System.Int32.Parse
将其转换为int答案 4 :(得分:0)
int.tryParse返回一个布尔值,而不仅仅是out值 - 你也可以这样做:
int year;
int? finalYear;
if(int.TryParse("some string", out year))
finalYear = year;
否则,如果“some string”将始终返回有效的int,为什么不执行
int? year = int.Parse("some string");
答案 5 :(得分: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();
答案 6 :(得分:-1)
这似乎也有效:
int? year;
if (something)
year = null;
else
{
int _year;
int.TryParse(year.SelectedItem.Value, out _year);
year = _year;
}
答案 7 :(得分:-2)
添加一些错误检测:
try
{
year = int.Parse("some string");
}
catch()
{
year = null;
}