有没有办法转换它?
public int? intVal ;
public double? dblVal ;
我现在的工作方式
if(dblVal==null)
intVal =null;
else
intVal = Convert.ToInt32(dblVal);
任何替代方式?提前谢谢。
答案 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;