C#泛型方法数值类型限制
C#中的泛型方法是跨不同类型抽象复杂操作的强大工具。然而,传统的where
关键字只允许基于接口或继承的约束。当您希望将参数限制为特定类型(例如数值基元类型)时,此限制可能会成为问题。
.NET 7 中引入 IBinaryInteger
随着.NET 7的出现,出现了一种解决此问题的方案:System.Numerics命名空间中的IBinaryInteger<Tself>
接口。此接口包含所有整数类型,使您可以将泛型方法约束为Int16、Int32、Int64、UInt16、UInt32和UInt64。
使用 IBinaryInteger
例如,考虑以下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中文网其他相关文章!