可空类型的静态成员

时间:2014-12-08 14:07:14

标签: c# nullable static-members

在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);

和同一件事的其他变种,但那只是凌乱......

3 个答案:

答案 0 :(得分:2)

int?Nullable<int>的语法糖。你问的是Nullable<int>.Parse。没有这样的方法。这就是你的困惑所在。

答案 1 :(得分:1)

Parse不会处理null值,它会抛出异常。您必须使用TryParseConvert类来解析

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