Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat mengekang jenis generik dalam .net hanya menerima jenis angka?

Bagaimanakah saya dapat mengekang jenis generik dalam .net hanya menerima jenis angka?

Patricia Arquette
Patricia Arquetteasal
2025-02-01 23:36:131034semak imbas

How Can I Constrain Generic Types in .NET to Only Accept Numeric Types?

menyekat .net generik ke jenis angka

.NET Generik menyediakan fleksibiliti jenis, tetapi sering memerlukan kekangan jenis. Keperluan yang kerap adalah untuk mengehadkan hujah jenis generik kepada jenis angka seperti

, Int16, Int32, Int64, UInt16, dan UInt32. UInt64

Penyelesaian dengan .net 7

manakala versi terdahulu tidak mempunyai penyelesaian langsung, .net 7 memperkenalkan

(dalam INumber<T>) sebagai antara muka yang paling komprehensif untuk semua jenis angka. Untuk jenis integer khusus, System.Numerics boleh didapati. IBinaryInteger<T> Contoh kod CODE: Fungsi Integer

Contoh ini menunjukkan menggunakan

:

IntegerFunction IBinaryInteger<T> Penggunaan:

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

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

sebelum .net 7, mencapai kekangan ini lebih mencabar. Kaedah seperti menggunakan corak kilang dengan kelas telah dicadangkan, tetapi ini menghasilkan kod yang kurang elegan dan kurang extensible.

Atas ialah kandungan terperinci Bagaimanakah saya dapat mengekang jenis generik dalam .net hanya menerima jenis angka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn