gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:52:22 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

这会将扩展方法限制为值类型。但是,您仍然会得到一些您无法处理的东西(例如 DateTime)。在这种情况下,您必须抛出异常。

编辑:正如 Mangist 在评论中所说,您可以执行以下操作以进一步约束该方法:

 public static bool IsOdd<T>(this T number) 
where T : struct, IComparable, IComparable<T>,
IConvertible, IEquatable<T>, IFormattable

关于c# - 避免数字数据类型的 .NET 扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11208728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com