2012-01-25 12 views
8

可能性の重複:
Generic constraints, where T : struct and where T : classできないことは、型制約でジェネリックメソッドをオーバーロードする

あなたがC#で相互に排他的なタイプの制約を使用して、一般的な方法をオーバーロードすることはできません、特定の理由はありますか?例えば、これらの方法で取る:

T DoSomething<T>(T arg) where T : class 
{ /* Do something */ } 

T DoSomething<T>(T arg) where T : struct 
{ /* Do something */ } 

DoSomething("1"); 
DoSomething(1); 

と私はそれを見る方法は、それらを起動しようとすると、doSomethingの()メソッドは、これまで彼らが取るパラメータのように、相互に排他的です - 最初のものは参照型、2番目のものは値型です。コンパイラは、文字列引数を使用したDoSomething呼び出しが最初のメソッドに行き、int引数を持つDoSomething呼び出しが2番目のメソッドに行くことを伝えることができます。

ジェネリックで概念的に何か不足していますか?または、これはC#で実装されていない機能ですか?

+1

を参照してください。ソリューションを見つけることができず、検索で結果が返ってこない場合や、結果が多すぎる場合は、本当にイライラします。 –

答えて

8

ジェネリック制約は、メソッドのシグネチャ

の一部ではない。この重複したテキストは、重複答えへのリンクを追加することによって改善することができ、この答えGeneric contraints on method overloads

Jon Skeet blog post on the topic

+0

この回答のリンクは現在解消されています(2015年4月26日現在)。 – devinbost

+0

@bostIT Huh私はJonのブログに何が起こったのだろうか。更新されたリンクが見つかるかどうかを確認します。 – asawyer

+0

@bostITアップデートを見つけてリンクを修正しました – asawyer

関連する問題