2012-03-14 3 views
2

異なる型のインスタンスを作成するための動的メソッドを作成しましたが、コンパイル時に上記のエラーが発生している理由がわかりません。また、戻り値を指定した型?GetInstance <T>() 'を使用から推測することはできません。明示的に型引数を指定してみてください

internal static T GetInstance<T>() where T:new() 
{ 
    return new T(); 
} 

http://msdn.microsoft.com/en-us/library/0hcyx2kd.aspx

EDIT:以下れるあなただけのMSDNを推奨しています何を使用していないのはなぜ

internal static T GetInstance<T>() 
    { 
     dynamic obj = Activator.CreateInstance(typeof(T)); 
     return obj; 
    } 

    private Foo f = GetInstance<Foo>(); 
+1

なぜ「動的」ですか?おそらく 'return(T)Activator.CreateInstance(typeof(T));'が必要です。しかし、あなたの関数からのエラーはどこですか?それを呼んでいる行ですか? – Rup

+0

良い質問ですが、実際には他のプロパティも設定する必要があります – BreakHead

+0

コンパイル時にエラーが発生します – BreakHead

答えて

7

けれどもなぜ、私は理解していませんこの方法をしたい?

代わりのvar x = GetInstance<Foo>();を呼び出すあなたは型パラメータとしてFooGetInstance<T>()を呼び出したい場合はFooはパラメータなしのコンストラクタを持たなければならない(または私は何かが足りないのですか?)いるので、あなただけのvar x = new Foo();を行うことができます。

+0

ありがとうJaaco +1、なぜT:new()? – BreakHead

+0

より高速で同一 - CreateInstanceは動的なパラメータを扱うことができますが、その中でそれらを渡さないと、新しいものは創造よりも優れています。 – TomTom

+0

@BreakHeadそれはJaakkoです:)もし "new()"制約がなければ、 "new T()"を行うことはできません。その制約は、 'T'にパラメータのないコンストラクタがあることを保証することだけです。 – flai

関連する問題