猿问

调用扩展方法时无法进行隐式转换

为什么在调用扩展方法时不能使用隐式转换?


这是示例代码:


using System;


namespace IntDecimal

{

    class Program

    {

        static void Main(string[] args)

        {

            decimal d = 1000m;

            int i = 1000;


            d = i; // implicid conversion works just fine


            Console.WriteLine(d.ToNumberString()); // Works as expected

            Console.WriteLine(i.ToNumberString()); // Error

            Console.WriteLine(ToNumberString2(i)); // Implicid conversion here works just fine

        }


        static string ToNumberString2(decimal d)

        {

            return d.ToString("N0");

        }

    }


    public static class Ext

    {

        public static string ToNumberString(this decimal d)

        {

            return d.ToString("N0");

        }

    }

}

我得到的错误:“int”不包含“ToNumberString”的定义,最好的扩展方法重载“Ext.ToNumberString(decimal)”需要“decimal”类型的接收器


正如我们所见。当我们不将它用作扩展方法时,存在从 int 到十进制的隐式转换并且工作得很好。


我知道我可以做些什么来使事情正常工作, 但是在使用扩展方法时无法进行隐式转换的技术原因是什么?


喵喵时光机
浏览 150回答 2
2回答
随时随地看视频慕课网APP
我要回答