首頁 >後端開發 >C++ >c#generics可以將類型的參數限制為特定的整數類型嗎?

c#generics可以將類型的參數限制為特定的整數類型嗎?

Susan Sarandon
Susan Sarandon原創
2025-02-01 23:26:10213瀏覽

Can C# Generics Constrain Type Arguments to Specific Integer Types?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn