在c#中,值类型的值不能为null
,但您可以通过附加问号来启用此值。
e.g。
int intCannotBeNull = 1;
int? intCanBeNull = null;
此外,在C#中,许多值类型都有static
个成员,因此您可以执行此操作,例如:
string strValue = "123";
intCannotBeNull = int.Parse(strValue);
但是,您无法执行以下任何一种操作:
intCanBeNull = int?.Parse(strValue);
intCanBeNull = (int?).Parse(strValue);
C#感到困惑。是否有一个有效的语法意味着strValue
可能是null
或有效的整数值并且分配有效?
我知道有简单的解决方法,例如:
intCanBeNull = (strValue == null) ? null : (int?)int.Parse(strValue);
和同一件事的其他变种,但那只是凌乱......
答案 0 :(得分:2)
int?
是Nullable<int>
的语法糖。你问的是Nullable<int>.Parse
。没有这样的方法。这就是你的困惑所在。
答案 1 :(得分:1)
Parse
不会处理null
值,它会抛出异常。您必须使用TryParse或Convert类来解析
Convert.ToInt32(int or int?)
这适用于long,float,decimal等..
答案 2 :(得分:1)
int?
实际上是Nullable<int>
。那个Nullable<T>
结构没有T
类的方法。因此,你必须自己做。
对于int?
,您可以尝试这样的事情:
string s = "1";
int? result;
if (string.IsNullOrEmpty(s))
{
result = null;
}
else
{
int o; // just a temp variable for the `TryParse` call
if (int.TryParse(s, out o))
{
result = o;
}
else
{
result = null;
}
}
// use result