为什么在调用扩展方法时不能使用隐式转换?
这是示例代码:
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 到十进制的隐式转换并且工作得很好。
我知道我可以做些什么来使事情正常工作, 但是在使用扩展方法时无法进行隐式转换的技术原因是什么?
相关分类