入力パラメータ(値型か参照型か)に応じてオーバーロードしたい更新機能があります
public void Update<T>(T item) where T : ValueType
コンパイラにエラーがあり、valuetypeを使用できない(そして制約としてさらに結合する)ことができないと主張しています。私はあきらめるべきですか、それとも私の希望するタイプに応じてメソッドをオーバーロードするためのきちんとした方法がありますか?
入力パラメータ(値型か参照型か)に応じてオーバーロードしたい更新機能があります
public void Update<T>(T item) where T : ValueType
コンパイラにエラーがあり、valuetypeを使用できない(そして制約としてさらに結合する)ことができないと主張しています。私はあきらめるべきですか、それとも私の希望するタイプに応じてメソッドをオーバーロードするためのきちんとした方法がありますか?
値型(null許容ではない)が必要な場合は、構造体を使用します。
public void Update<T>(T item) where T : struct
これを使用して、null許容値型ではないwhere T : struct
ことを強制できます(これは、値型であるにもかかわらず、では機能しません)。T
Nullable<T>
ただし、型の制約でオーバーロードできないため、これは大きな目標には役立ちません。したがって、これは無効です。
// Invalid overloading
void Foo<T>(T item) where T : class
void Foo<T>(T item) where T : struct
基本的に、型パラメーターの数はメソッドのシグネチャの一部ですが(オーバーロードの観点から)、名前と制約はそうではありません。
これを回避するための恐ろしい方法がありますが、代わりに別のメソッド名を使用することをお勧めします。