如何在转换十进制之前检查有效值

时间:2009-11-02 14:03:04

标签: c#

我认为如果total为null,这将会爆炸(我不记得小数是否在开头被初始化为零或零)

public int SomePropertyName
{
    get { return Convert.ToInt32(Decimal.Round(total)); }
}

我应该检查null还是> 0?

5 个答案:

答案 0 :(得分:5)

十进制是一种值类型 - 对于小数,没有“null”这样的值。

但是,小数超出int的范围是完全可能的。你可能想要:

decimal rounded = decimal.Round(total);
if (rounded < int.MinValue || rounded > int.MaxValue)
{
    // Do whatever you ought to here (it will depend on your application)
}
return (int) rounded;

我对你为什么使用Convert.ToInt32感到有些困惑,因为你声明你的属性返回decimal。这里的大局是什么?你想要实现什么目标?

答案 1 :(得分:2)

Decimal是值类型,不能为null。

如果你需要知道它是否已被初始化,你应该使用可以为空的小数:

Decimal? total = null;

public int SomePropertyName
{
    get 
    { 
        if (total.HasValue) Convert.ToInt32(Decimal.Round(total.Value)); 
        return 0; // or whatever
    }
}

答案 2 :(得分:1)

小数是值类型,因此不能为空。

所以不需要检查那里..

答案 3 :(得分:1)

System.Decimal是值类型,因此不能为null。第二件事,该方法的返回值为decimal,那么为什么要转换为Int32

答案 4 :(得分:1)

正如其他人所说,Decimal是一种值类型,不能为null。但是,如果从字符串转换,则Decimal.TryParse是您的朋友......