C#泛型方法對特定數值類型的約束
在C#中使用泛型時,是否存在一種約束可以將類型參數T限制為僅包含以下數值類型:Int16、Int32、Int64、UInt16、UInt32和UInt64?
解答
在.NET 7中,引入了一個專門用於將T限制為數值類型的接口:System.Numerics
命名空間中的INumber<T>
。要僅接受整數類型,可以使用IBinaryInteger<T>
。
考慮以下IntegerFunction
方法的實現:
<code class="language-csharp">static bool IntegerFunction<T>(T value) where T : IBinaryInteger<T> { return value > T.Zero; }</code>
使用方法示例:
<code class="language-csharp">Console.WriteLine(IntegerFunction(5)); // True Console.WriteLine(IntegerFunction((sbyte)-5)); // False Console.WriteLine(IntegerFunction((ulong)5)); // True</code>
歷史背景
在.NET 7之前,C#沒有提供這樣的約束。正如Anders Hejlsberg解釋的那樣,原因是為了避免不必要的複雜性,而實際好處有限。
對於直接支持約束不可用的場景,建議使用替代方法,例如工廠模式或策略類。
以上是c#generics可以將類型的參數限制為特定的整數類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!