2012-01-17 6 views
2

私は以下のコードに問題があり、そこに誰かが間違っていると教えてくれることを期待していました。私は与えられてい"暗黙のうちに 'thisMethodタイプ<T>'を 'T'に変換できません"

エラーは次のとおりです。

class ThisThing<T> 
{ 
    public string A { get; set; } 
    public string B { get; set; } 
} 

class OtherThing 
{ 
    public T DoSomething<T>(string str) 
    { 
     T foo = DoSomethingElse<T>(str); 
     return foo; 
    } 

    private T DoSomethingElse<T>(string str) 
    { 
     ThisThing<T> thing = new ThisThing<T>(); 
     thing.A = "yes"; 
     thing.B = "no"; 

     return thing; // This is the line I'm given the error about 
    } 
} 

思考:

暗黙的にタイプThisThing<T>私のコード

Tに変換することができませんか?私はあなたの助けに感謝します!何をしようとする

+3

を試すことができます読んで、それはそんなに簡単になりキャピタル・、と型名を起動してください。そして、アンダースコアでローカル変数を開始しないでください。または、そうする場合は、アンダースコアですべてを開始します。これは私たち(さらに重要なのはあなた)がコードを読んでエラーを防ぐのに役立ちます。 –

答えて

2

あなたがそのメソッドの戻り値の型がTであることをコードに言った、あなたはthisThing<T>を返却しようとしている:言ってようなものだ

。コンパイラは、一方を他方からどのように変換するかわからないので、それについてあなたに不平を言っています。

メソッドの戻り値の型を変更するか、メソッドで返す値を変更する必要があります。

1
private thisThing<T> doSomethingElse<T>(string thisString) { } 
3

はできないタイプTにタイプthisThingに変換されます。代わりに、あなたはにdoSomethingElse<T>(...)のあなたの戻り値の型を変更する必要があります:あなたが実際にこれらのメソッドの本体でthisThing<T>を返しているのに対し、

private thisThing<T> doSomethingElse<T>(...) { ... } 
7

方法doSomethingdoSomethingElseは、Tの戻り値の型を持っています。これらは同じではありません。

簡単な例として、これはList<T>を返すのと同じで、ちょうどTと予想されます。全く異なるクラスです。

2

それは私

​​については明らかですが、タイプthisThing<T>のですが、戻り値の型は、型のT

4

まあで、コンパイラがそれを言う:

private T doSomethingElse<T>(string thisString) 

がする必要があります:

private thisThing<T> doSomethingElse<T>(string thisString) 

コンパイルする。

修正は、何をしようとしているかによって異なります(パラメータを使用しない方法はすでに疑わしい)。

3

thisThing<T>はタイプパラメータとしてTを持つ汎用タイプです。 Tには変換できません。

List<string> stringList = new List<string>(); 
string someString = stringList; // Makes no sense. 
0

あなたは以下のコードのようなあなたのotherThingクラスのコードを変更し、

class otherThing 
    { 
     public otherThing() 
     { 
     } 
     public thisThing<T> doSomething<T>(string thisString) 
     { 
      thisThing<T> foo = doSomethingElse<T>(thisString); 
      return foo; 
     } 
     private thisThing<T> doSomethingElse<T>(string thisString) 
     { 
      thisThing<T> _thisThing = new thisThing<T>(); 
      _thisThing.A = "yes"; 
      _thisThing.B = "no"; 
      return _thisThing; //This is the line I'm given the error about 
     } 
    } 
関連する問題