.NETジェネリックを数値タイプに制限する
.NETジェネリックはタイプの柔軟性を提供しますが、多くの場合、タイプの制約が必要です。 頻繁に必要なのは、一般的なタイプの引数をInt16
、Int32
、Int64
、UInt16
、UInt32
、UInt64
。
.NET 7 以前のバージョンには直接的なソリューションがありませんでしたが、.NET 7は、すべての数値タイプの最も包括的なインターフェイスとして
(in)を導入します。特に整数タイプの場合、INumber<T>
が利用可能です。System.Numerics
IBinaryInteger<T>
この例では、
:を使用してIntegerFunction
を示しています
IBinaryInteger<T>
<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の前に、この制約を達成することはより困難でした。 クラスで工場パターンを使用するなどの方法が提案されましたが、これらはエレガントではなく、拡張性の低いコードをもたらしました。
以上が.NETの一般的なタイプを制約して、数値タイプのみを受け入れるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。