私はジェネリック型で次のメソッドを持っています:
T GetValue<T>();
Tをint、string、floatなどのプリミティブ型に制限しますが、クラス型は制限しません。私はこのようなクラスタイプのジェネリックを定義できることを知っています:
C GetObject<C>() where C: class;
プリミティブ型が可能かどうか、もし可能ならどうなるかはわかりません。
これを使用して、値タイプに制限できます。
where C: struct
文字列にも言及します。残念ながら、文字列は値型ではないため許可されません。
実際、これは特定の範囲で仕事をします:
public T Object<T>() where T :
struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
数値型に制限するには、 ValueType クラス用に定義された次のサンプルのいくつかの有用なヒントを取得できます。
探しているものは次のとおりです。
T GetObject<T>() where T : struct;
そのセットに完全に一致する一般的な制約はありません。実際にやりたいことは何ですか?たとえば、静的なctorなどの実行時チェックを使用してハックできます(ジェネリック型の場合-ジェネリックメソッドではそれほど簡単ではありません)...
しかしながら;私がこれを見るほとんどの場合、それは人々が次のいずれかを望んでいるからです。
メソッドで実際に何をしようとしていますか? IComparableまたは他のインターフェイスを実装するために実際にCが必要になる可能性があります。その場合、次のようなものが必要です
T GetObject<T> where T: IComparable