2017-04-12 53 views
-3
private decimal? xposition; 
public decimal? XPosition 
{ 
    get 
    { 
     return this.xposition; 
    } 
    set 
    { 
     this.xposition = value; 
     Math.Round(this.xposition, 4); 
    } 
} 

为什么我不能在set方法中使用Math.round?它说:为什么我不能在set方法中使用Math.round#

参数'#1'不能转换'小数?'表达式为'double'

+1

请问您可以粘贴相关代码吗? – Bathsheba

+0

私有小数? xPosition位置; –

+0

私有小数? xPosition位置; \t \t public decimal? x向位置 \t \t { \t \t \t得到 \t \t \t { \t \t \t \t回报this.xposition; \t \t \t} \t \t \t设置 \t \t \t \t {\t \t \t \t \t \t \t this.xposition =值; \t \t \t \t Math.Round(this.xposition,4); \t \t \t \t} \t \t \t \t} –

回答

3

Math.Round使用十进制,不可为空的十进制。改为使用Math.Round(xposition.Value, 4)。此外,请注意,必须将此值分配为有用,也许您的意思是做类似的操作:

private decimal? xposition; 
public decimal? XPosition 
{ 
    get 
    { 
     return this.xposition; 
    } 
    set 
    { 
     this.xposition = value.HasValue ? Math.Round(value.Value, 4) : null; 
    } 
} 
+0

你在setter中有一个额外的分号。 – vyrp

+0

这不是@vyrp的问题。不检查null是。 –

+0

是的,我知道。其他答案更正确。我只是想清理双分号。但我无法编辑,因为它的变化不会超过6个字符。 – vyrp

0

您的代码有几个问题。

  • 首先,您应该使用可空decimal.Value
  • 其次,在使用它之前,您应该检查该值是否为null
  • 第三,你应该分配结果。

我会使用此代码:

private decimal? xposition; 
public decimal? XPosition 
{ 
    get 
    { 
     return this.xposition; 
    } 
    set 
    { 
     if (value != null) 
     { 
      this.xposition = Math.Round(value.Value, 4); 
     } 
     else 
     { 
      this.xposition = value; 
     } 
    } 
} 
2

Math.Round传回四舍五入值,它不会修改传递的值。所以,你必须返回值分配给支持字段xposition

xposition = Math.Round(value, 4); 

但因为它是一个可空,你必须处理它可以为空的情况下,你必须将它转换为十进制为Math.Round

public decimal? XPosition 
{ 
    get 
    { 
     return this.xposition; 
    } 

    set 
    { 
     this.xposition = value == null ? (decimal?)null : Math.Round(value.Value, 4); 
    } 
} 
相关问题