我想在C#中将字符串解析为可以为空的int.即.我想要返回字符串的int值,如果无法解析,则返回null.
我有点希望这会奏效
int? val = stringVal as int?;
Run Code Online (Sandbox Code Playgroud)
但这不起作用,所以我现在这样做的方式是我写了这个扩展方法
public static int? ParseNullableInt(this string value)
{
if (value == null || value.Trim() == string.Empty)
{
return null;
}
else
{
try
{
return int.Parse(value);
}
catch
{
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
编辑: 感谢TryParse的建议,我确实知道这一点,但它的结果大致相同.我更感兴趣的是知道是否有一个内置的框架方法可以直接解析为可以为空的int?
我有一个包含特定整数值的Session,它们使用给定的控件进行索引.通常,以下方法可以正常工作:
int value;
int.TryParse(Session["Key"].ToString(), out value);
Run Code Online (Sandbox Code Playgroud)
但是,我确实需要考虑null.其中,如果string
失败则默认输出将返回a null
.除了我注意到它int.TryParse
不起作用:
int? value = null;
int.TryParse(Session["Key"].ToString(), out value);
Run Code Online (Sandbox Code Playgroud)
那么如何尝试解析,如果失败则导致null?
我发现了这个问题,微软开发者网络指示:
当此方法返回时,如果转换成功,则包含等效于s中包含的数字的有符号整数值;如果转换失败,则包含零.如果string参数为null或String.Empty,格式不正确,或者表示小于最小值或大于最大值的数字,则转换失败.此参数未初始化传递.
明确指出,如果int.TryParse
失败,整数将保持零值. 在我的使用实例中,零可以是有效值.所以我需要null
,任何想法?
我有时需要将int的值设置为null,有时设置为实际值.问题是我需要将该值存储在SAME变量中而不是创建另一个变量.
int? year;
if(something)
year = null;
else
int.tryParse("some string", out year);
Run Code Online (Sandbox Code Playgroud)
"some string"总是一个有效的int,但问题是我不能在int上使用int.tryParse?怎么解决这个问题?