Der*_*rek 9 c# extension-methods
假设我想在.NET中的数字数据类型中添加一个名为IsOdd()的扩展方法.但是,对于Int16,Int32,Int64等数据类型,此实现几乎是相同的,除了为扩展方法定义的参数.我真的不喜欢这种冗余,但想知道是否有办法避免它.
有没有更好的方法来处理这个?相反,我应该为System.Math实现扩展方法并为IsOdd()创建重载定义?简而言之,我很好奇数字数据类型的扩展方法是否应该完全避免,因为它们具有固有的冗余性.
您无法为静态类创建扩展方法.你能做的最接近的是:
public static bool IsOdd<T>(this T number) where T : struct
Run Code Online (Sandbox Code Playgroud)
这会将扩展方法限制为值类型.但是,你仍然会得到一些你无法处理的东西(DateTime例如).在这种情况下你必须抛出异常.
编辑:正如Mangist在评论中所说,您可以执行以下操作来进一步约束该方法:
public static bool IsOdd<T>(this T number)
where T : struct, IComparable, IComparable<T>,
IConvertible, IEquatable<T>, IFormattable
Run Code Online (Sandbox Code Playgroud)