1

入力パラメータ(値型か参照型か)に応じてオーバーロードしたい更新機能があります

public void Update<T>(T item) where T : ValueType

コンパイラにエラーがあり、valuetypeを使用できない(そして制約としてさらに結合する)ことができないと主張しています。私はあきらめるべきですか、それとも私の希望するタイプに応じてメソッドをオーバーロードするためのきちんとした方法がありますか?

4

2 に答える 2

3

値型(null許容ではない)が必要な場合は、構造体を使用します。

public void Update<T>(T item) where T : struct

于 2012-08-15T15:15:56.630 に答える
1

これを使用して、null許容値型ではないwhere T : structことを強制できます(これは、値型であるにもかかわらず、では機能しません)。TNullable<T>

ただし、型の制約でオーバーロードできないため、これは大きな目標には役立ちません。したがって、これは無効です。

// Invalid overloading
void Foo<T>(T item) where T : class
void Foo<T>(T item) where T : struct

基本的に、型パラメーターのはメソッドのシグネチャの一部ですが(オーバーロードの観点から)、名前と制約はそうではありません。

これを回避するための恐ろしい方法がありますが、代わりに別のメソッド名を使用することをお勧めします。

于 2012-08-15T15:18:21.163 に答える