2016-04-22 8 views
2

を指定せずに、静的ジェネリッククラスのメソッドを呼び出すと、下記のコードを、これは動作しません、私はこのような何かをしたい、次のコードを考えてみましょうが、これは私が欲しいものタイプ

class Program 
{ 
    static void Main(string[] args) 
    { 
     TestClass.Test("something"); 
    } 
} 

public static class TestClass<T> 
{ 
    public static void Test(T something) { } 
} 


です私は同じクラスの20のジェネリックメソッドのように持っていて、彼らはその制約を何度も繰り返しています。

public static class TestClass 
{ 
    public static void Test<T>(T something) { } 
} 


「何か」はすでに

TestClass<string>.Test("something"); 


文字列であるので、私は、自分のコードを使用する人がタイプとして文字列を指定したくないので、私はこれを行うにはしたくありません私の質問を別の方法で説明するために、私は同じクラスの20のメソッドのような同じジェネリック型と制約を取りたいので、何度も何度も繰り返してはいけません。彼らが渡すパラメータは型を提供します。

ありがとうございます!

+0

あなたのコードは正常に動作し、コンパイラはタイプ –

+0

@EhsanSajjadを推測します[よろしいですか?](http://rextester.com/CFOGL63087)は 'ジェネリック型「Rextester.TestClass 」を使用すると、1種類arguments' – Jamiec

+0

が必要です'TestClass .Test(" something ");'あなたに知られている呼び出しで渡される可能性があるすべての型ですか? –

答えて

1

あなたはクラス自体にジェネリックを指定した場合、あなたは、あなたの質問に述べたように、それを指定する必要がある - これは動作します:

TestClass<string>.Test("something") 

あなたはコンパイラがそれを推測したい場合は、必要に代わりの方法でそれを置く:

public static class TestClass 
{ 
    public static void Test<T>(T something) { } 
} 

TestClass.Test("something");// T is infered. 

ライブ例:私が正しくあなたを理解していればhttp://rextester.com/VOF10456

1

あなたはこれを必要とする:

public static void Test<T>(T myValue) {. ..} 

次に、このようにそれを呼び出す:自動的にタイプstringを推測します

TestClass.Test("DoSomething"); 

を、あなたは型パラメータの中でそれを指定する必要がありwon't。