替代方式转换int?加倍?

时间:2015-10-07 18:03:45

标签: c# .net type-conversion .net-4.5

有没有办法转换它?

public int? intVal ;
public double? dblVal ;

我现在的工作方式

if(dblVal==null)
    intVal =null;
else
    intVal = Convert.ToInt32(dblVal);

任何替代方式?提前谢谢。

2 个答案:

答案 0 :(得分:15)

刚演员:

intVal = (int?) dblVal;

如果null为空,这将导致dblVal值。请注意,与Convert.ToInt32(double)不同,如果dblVal超出int的范围,则会导致异常。如果这是一个问题,你应该确切地想要实现你想要达到的目标。

从C#5规范,第6.2.3节:

  

显式可空转换允许对非可空值类型进行操作的预定义显式转换也可以与这些类型的可空形式一起使用。对于从非可空值类型S转换为非可空值类型T的每个预定义显式转换(§6.1.1,§6.1.2,§6.1.3,§6.2.1和§6.2。 2),存在以下可空转换:

     
      
  • S的明确转换?到T?。
  •   
  • 从S到T的显式转换?
  •   
  • S的明确转换?到T。
  •   
     

基于从S到T的基础转换的可空转换的评估进行如下:

     
      
  • 如果可空转换来自S?到T?:      
        
    • 如果源值为null(HasValue属性为false),则结果为T?类型的空值。
    •   
    • 否则,转换被评估为从S展开?到S,然后是从S到T的底层转换,接着是从T到T?的包装。
    •   
  •   
  • ...
  •   

答案 1 :(得分:0)

这是一种方式:

intVal = dblVal.HasValue ? Convert.ToInt32(dblVal.Value) : (int?)null;