如何圆双可空类型?

时间:2011-05-26 17:33:29

标签: c#

我想圆双? value,所以如果有2,3应该是2但是如果有null则应该为null。

3 个答案:

答案 0 :(得分:22)

没有直接的方法来绕过一个可空的双人。您需要检查变量是否具有值:如果是,则将其舍入;否则,请返回null

如果使用条件?:运算符执行此操作,则需要进行一些转换:

double? result = myNullableDouble.HasValue
               ? (double?)Math.Round(myNullableDouble.Value)
               : null;

可替换地:

double? result = null;
if (myNullableDouble.HasValue)
{
    result = Math.Round(myNullableDouble.Value);
}

答案 1 :(得分:20)

正如其他人所指出的那样,一次性做这件事很容易。一般来说:

static Func<T?, T?> LiftToNullable<T>(Func<T, T> func) where T : struct
{
    return n=> n == null ? (T?) null : (T?) func(n.Value);
}

现在你可以说:

var NullableRound = LiftToNullable<double>(Math.Round);
double? d = NullableRound(null);

嘿,现在您可以使用任何方法执行此操作,该方法接受并返回值类型。

答案 2 :(得分:2)

return d.HasValue ? Math.Round(d.Value) : (double?)null;