【发布时间】:2010-01-02 07:48:28
【问题描述】:
我正在尝试编写一个扩展方法,它将函数 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();
}
}
这很好用,因为上面Main() 方法中的变量i 被声明为int。但是,如果 i 被声明为 Int16 或 Int64,则扩展方法不会显示,除非它显式转换为 int 或 Int32。
我现在想对Int16 和Int64 应用相同的HasFactor 方法。但是,我宁愿不为int 的每种类型编写单独的扩展方法。我可以为Int64 编写一个方法,然后将所有内容显式转换为Int64 或long,以便出现扩展方法。
理想情况下,我希望将相同的扩展方法应用于所有三种类型,而无需复制和粘贴大量代码。
这在 C# 中是否可行?如果不可行,是否有针对这种情况的推荐最佳实践?
【问题讨论】:
-
基于 Eilon 和 Marc Gravell 的输入,我想我将为
Int64类型创建一种扩展方法。这应该适用于我正在做的事情。
标签: c# .net types extension-methods