有没有办法编写适用于多种类型的扩展方法?

时间:2010-01-01 23:41:39

标签: c# .net types extension-methods

我正在尝试编写一个扩展方法,将函数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被声明为Int16Int64,则扩展方法不会显示,除非将其显式转换为intInt32

我现在想对HasFactorInt16使用相同的Int64方法。但是,我不想为每种类型的int编写单独的扩展方法。我可以Int64编写单个方法,然后将所有内容明确地转换为Int64long,以便显示扩展方法。

理想情况下,我希望将相同的扩展方法应用于所有三种类型,而无需复制和粘贴大量代码。

这在C#中是否可行?如果没有,是否有针对此类情况的推荐最佳做法?

1 个答案:

答案 0 :(得分:6)

不,这在C#中是不可能的。您必须为每种类型创建一个扩展方法。最接近的是具有在接口上操作的扩展方法,但在这种情况下,没有由各种数字类型实现的INumeric接口或任何类似的接口。