我正在尝试编写一个扩展方法,将函数HasFactor
添加到C#中的类int
。这非常有效,如下:
static class ExtendInt
{
public static bool HasFactor(this int source, int factor)
{
return (source % factor == 0);
}
}
class Program
{
static void Main()
{
int i = 50;
int f = 2;
bool b = i.HasFactor(f);
Console.WriteLine("Is {0} a factor of {1}? {2}",f,i,b);
Console.ReadLine();
}
}
这很有用,因为上面i
方法中的变量Main()
被声明为int
。但是,如果i
被声明为Int16
或Int64
,则扩展方法不会显示,除非将其显式转换为int
或Int32
我现在想对HasFactor
和Int16
使用相同的Int64
方法。但是,我不想为每种类型的int
编写单独的扩展方法。我可以为Int64
编写单个方法,然后将所有内容明确地转换为Int64
或long
,以便显示扩展方法。
理想情况下,我希望将相同的扩展方法应用于所有三种类型,而无需复制和粘贴大量代码。
这在C#中是否可行?如果没有,是否有针对此类情况的推荐最佳做法?
答案 0 :(得分:6)
不,这在C#中是不可能的。您必须为每种类型创建一个扩展方法。最接近的是具有在接口上操作的扩展方法,但在这种情况下,没有由各种数字类型实现的INumeric接口或任何类似的接口。