我不确定这只是我,但这看起来有点奇怪。我在静态类中有一些扩展用于舍入值:
public static double? Round(this double? d, int decimals)
{
if (d.HasValue)
return Math.Round(d.Value, decimals, MidpointRounding.AwayFromZero);
return null;
}
public static double? Round(this double d, int decimals)
{
return Math.Round(d, decimals, MidpointRounding.AwayFromZero);
}
我最近为舍入小数添加了相同的内容:
public static decimal? Round(this decimal? d, int decimals)
{
if (d.HasValue)
return Math.Round(d.Value, decimals, MidpointRounding.AwayFromZero);
return null;
}
public static decimal? Round(this decimal d, int decimals)
{
return Math.Round(d, decimals, MidpointRounding.AwayFromZero);
}
我希望在这一点上没有人能看到任何错误。当我有代码
时出现 var x = (decimal)0;
var xx = x.Round(0);
CLR抛出错误成员'decimal.Round(decimal)'无法使用实例引用访问;使用类型名称对其进行限定
WTF?如果我只是重命名我的十进制舍入扩展(例如称之为RoundDecimal),一切正常。似乎CLR在某种程度上混淆了双重和十进制方法..任何人都可以解释这个吗?
有趣的是,如果我改为调用Round(x,0),它可以正常工作......
答案 0 :(得分:3)
致电时:
var xx = x.Round(0);
编译器将此视为对Decimal.Round的调用,这是一个错误,因为它是静态的。
我强烈建议您使用与框架的“Round”方法不同的方法名称。例如,在您的情况下,我建议使用RoundAwayFromZero。如果你这样做,你可以这样做:
var xx = x.RoundAwayFromZero(0);