2017-08-16 78 views
1

我有以下扩展方法类的双打和小数。 编译器给我一个错误的十进制扩展方法错误.net核心2.0更新

number.Round(2) 
number.Round(3) 

小数点方法中调用,但不抱怨的双重价值相同的方法。 任何想法为什么?

下面是代码...容易重现......

public static class NumberExtensions 
{ 
    public static double Round(this double number, int decimals) 
    { 
     return Math.Round(number, decimals); 
    } 

    public static double Round3(this double number) 
    { 
     return number.Round(3); 
    } 

    public static double Round2(this double number) 
    { 
     return number.Round(2); 
    } 

    public static decimal Round(this decimal number, int decimals) 
    { 
     return Math.Round(number, decimals); 
    } 

    public static decimal Round3(this decimal number) 
    { 
     return number.Round(3); 
    } 

    public static decimal Round2(this decimal number) 
    { 
     return number.Round(2); 
    } 
} 

回答

0

报告的错误是:

错误CS0176会员 'decimal.Round(十进制)' 不能访问 一个实例引用;与类型名限定它,而不是

可能的原因&解决方案:Error with rounding extension on decimal - cannot be accessed with an instance reference; qualify it with a type name instead

更新:

与.NET核心版本< 2.0,以下statment:

decimal.Round(3); 

错误CS0117'小数'不符合覃有关定义,“圆”

但随着.NET 2.0核心的有效的语句,因为它涵盖较之以前的.NET版本的核心更.NET框架,

下面从https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-net-core-2-0/引用:

我们将.NET Standard 中的可用API集从.NET Standard 1.6中的13k增加到.NET Standard 2.0中的32k。大多数 添加的API是.NET Framework API

+1

感谢您的检查,但如果我只是从.NET Core 2.0 - > .NET Core 1.1更改我的目标框架,那么构建就会成功,而且不会出错。所以......我不明白为什么它在1.1而不是2.0中工作......第二件事:为什么只有带十进制的行会在.NET Core 2.0中抛出一个错误......但是带有双精度的代码行工作正常。 – Simon

0

Okey明白了。

在.NET Core中,已经添加了一个十进制的静态方法,命名为“Round”...所以这就是冲突。