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

Ben*_*ack 8 .net c# extension-methods types

我正在尝试编写一个扩展方法,将函数添加HasFactorintC#中的类中.这非常有效,如下所示:

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();
     }
}
Run Code Online (Sandbox Code Playgroud)

因为变量这个伟大的工程iMain()以上方法声明为int.但是,如果i声明为an Int16或an Int64,则扩展方法不会显示,除非它显式转换为intInt32.

我现在想同样的申请HasFactor方法Int16Int64.但是,我宁愿不为每种类型的内容编写单独的扩展方法int.我可以为一个方法编写一个方法Int64,然后将所有内容显式地转换为Int64或者long按顺序显示扩展方法.

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

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

Eil*_*lon 6

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