Rumah >pembangunan bahagian belakang >C++ >Bolehkah C# Generik Mengekang Argumen Jenis ke Jenis Integer tertentu?
Apabila menggunakan generik dalam C#, adakah terdapat kekangan yang boleh mengehadkan parameter jenis t untuk hanya jenis nilai berikut: INT16, INT32, INT64, UINT16, UINT32, dan UINT64?
jawab
dalam .net 7, antara muka yang digunakan khusus untuk mengehadkan t ke jenis berangka:
di ruang nama. Untuk menerima hanya jenis integer, anda boleh menggunakan. System.Numerics
INumber<T>
Memandangkan pelaksanaan kaedah berikut: IBinaryInteger<T>
cara menggunakan contoh: IntegerFunction
<code class="language-csharp">static bool IntegerFunction<T>(T value) where T : IBinaryInteger<T> { return value > T.Zero; }</code>latar belakang sejarah
<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, C#tidak memberikan kekangan sedemikian. Seperti yang dijelaskan oleh Anders Hejlsberg, sebabnya adalah untuk mengelakkan kerumitan yang tidak perlu, dan faedah sebenar adalah terhad.
Untuk adegan yang tidak tersedia secara langsung untuk menyokong kekangan, adalah disyorkan untuk menggunakan kaedah alternatif, seperti model kilang atau strategi.
Atas ialah kandungan terperinci Bolehkah C# Generik Mengekang Argumen Jenis ke Jenis Integer tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!