首页 >后端开发 >C++ >如何将通用方法参数限制为C#中的数字类型?

如何将通用方法参数限制为C#中的数字类型?

DDD
DDD原创
2025-02-01 23:16:09891浏览

How Can I Restrict Generic Method Arguments to Numeric Types in C#?

C#泛型方法数值类型限制

C#中的泛型方法是跨不同类型抽象复杂操作的强大工具。然而,传统的where关键字只允许基于接口或继承的约束。当您希望将参数限制为特定类型(例如数值基元类型)时,此限制可能会成为问题。

.NET 7 中引入 IBinaryInteger

随着.NET 7的出现,出现了一种解决此问题的方案:System.Numerics命名空间中的IBinaryInteger<Tself>接口。此接口包含所有整数类型,使您可以将泛型方法约束为Int16、Int32、Int64、UInt16、UInt32和UInt64。

使用 IBinaryInteger 实现 IntegerFunction

例如,考虑以下IntegerFunction,如果传递的参数是正整数,则返回True。

<code class="language-csharp">static bool IntegerFunction<T>(T value) where T : IBinaryInteger<T>
{
    return value > T.Zero;
}</code>

示例用法

使用新的IntegerFunction,我们可以轻松检查不同整数类型的正负性:

<code class="language-csharp">Console.WriteLine(IntegerFunction(5));         // True
Console.WriteLine(IntegerFunction((sbyte)-5)); // False
Console.WriteLine(IntegerFunction((ulong)5));  // True</code>

历史回顾

在引入IBinaryInteger<Tself>之前,C#缺乏对将泛型方法参数限制为特定数值类型的显式支持。相反,程序员求助于变通方法,例如工厂模式或策略类。但是,这些方法需要用户编写额外的代码并增加复杂性。

以上是如何将通用方法参数限制为C#中的数字类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn