9

IsOdd()という拡張メソッドを .NET の数値データ型に追加するとします。ただし、これの実装は、拡張メソッドに対して定義されているパラメーターを除いて、Int16Int32Int64などのデータ型に対して実質的に同じです。私はこの冗長性が本当に好きではありませんが、それを回避する方法がないのだろうか.

これを処理するより良い方法はありますか?代わりに、 System.Math の拡張メソッドを実装し、IsOdd()のオーバーロードされた定義を作成する必要がありますか? 要するに、数値データ型の拡張メソッドは、固有の冗長性があるため、一般的に完全に回避する必要があるかどうかに興味があります。

4

2 に答える 2

8

静的クラスの拡張メソッドを作成することはできません。あなたができる最も近いものは次のとおりです。

public static bool IsOdd<T>(this T number) where T : struct

これにより、拡張メソッドが値型に制限されます。ただし、処理できないものもあります (たとえばDateTime)。この場合、例外をスローする必要があります。

編集: Mangist がコメントで述べたように、次のようにしてメソッドをさらに制限できます。

 public static bool IsOdd<T>(this T number) 
     where T : struct, IComparable, IComparable<T>, 
               IConvertible, IEquatable<T>, IFormattable
于 2012-06-26T13:49:08.563 に答える
0

Genericsあなたが言及した場合のように、重複を避けるためにいつでも拡張メソッドと組み合わせることができます。例えば

IsOdd<Type>()

于 2012-06-26T13:49:54.140 に答える