C# 避免数字数据类型的.NET扩展方法?

C# 避免数字数据类型的.NET扩展方法?,c#,extension-methods,C#,Extension Methods,假设我想在.NET中的数据类型数中添加一个名为IsOdd()的扩展方法。然而,除了为扩展方法定义的参数外,对于诸如Int16、Int32、Int64等数据类型,此方法的实现几乎相同。我真的不喜欢这种冗余,但不知道是否有办法避免它 有没有更好的方法来处理这个问题?比如说,我应该为System.Math实现一个扩展方法,并为IsOdd()创建重载定义吗?简而言之,我很好奇,由于数字数据类型固有的冗余性,是否应该完全避免使用扩展方法。您不能为静态类创建扩展方法。 您可以做的最接近的操作如下: publ

假设我想在.NET中的数据类型数中添加一个名为IsOdd()的扩展方法。然而,除了为扩展方法定义的参数外,对于诸如Int16Int32Int64等数据类型,此方法的实现几乎相同。我真的不喜欢这种冗余,但不知道是否有办法避免它


有没有更好的方法来处理这个问题?比如说,我应该为System.Math实现一个扩展方法,并为IsOdd()创建重载定义吗?简而言之,我很好奇,由于数字数据类型固有的冗余性,是否应该完全避免使用扩展方法。

您不能为静态类创建扩展方法。 您可以做的最接近的操作如下:

public static bool IsOdd<T>(this T number) where T : struct

您总是可以将
泛型
与扩展方法相结合,以避免重复,就像您提到的情况一样。e、 g


IsOdd()

好吧,我会避免对这些类型使用扩展方法,因为它们非常常用,我不需要经常使用
IsOdd
。这会把他们弄得乱七八糟。。。。要添加到@Servy的注释中,通常认为向struct&object等非常通用的类型添加扩展方法是不好的做法。相反,只需创建一个静态类并使用
MyMath.IsOdd(x)
进行测试,这样您就可以为程序集中加载的每个结构混乱intellisense。听起来这比它在那一点上的价值要麻烦得多。您可以通过添加where T:struct、IComparable、IComparable、IConvertible、IEquatable来进一步限制它,IFormattable@Servy,这取决于你的观点。还请记住,您可以使用
[EditorBrowsable]
属性控制是否显示方法。如果您使用
[EditorBrowsable]
,则即使在您想要的时候也看不到它,这对您也没有多大好处。如果它只是将它添加到所有它实际上应该
int16
int32
int64
,等等的类型中,即使它只是通过顶部的
使用
,它仍然会显示很多。我不知道你的情况,但我没有很多非平凡的类,它们在某个时候不使用某种数值类型。再加上所有受影响的非数值结构,我知道这会让我省去更多的工作。@Servy,好吧,好吧,好吧。你赢了。如果它真的那么困扰你,你不必给它下定义。就个人而言,我可以看到自己在做类似的事情(尽管我不知道
IsOdd()
)。
 public static bool IsOdd<T>(this T number) 
     where T : struct, IComparable, IComparable<T>, 
               IConvertible, IEquatable<T>, IFormattable