2016-12-07 12 views
0

を変換できません。次のコードは、が暗黙的に派生型ジェネリック型をベースとする

エラーCS0029でコンパイルされていません:暗黙的に「T」を型「CSConsoleTest.Derived」を変換できません。

これはコンパイラのバグですか、それとも何故ですか?

public class Base 
{ 
    public Derived Derived; 
} 
public class Derived : Base 
{ 
} 
class Program 
{ 
    public static void Func<T>(T obj) where T : Base 
    { 
     obj = obj.Derived; 
    } 
} 
+1

したがって、私は 'Func (a);'を呼び出します。今何が起こると思いますか? –

+0

ありがとうございます。それは愚かな質問でした –

答えて

0

TT常に基本ではないクラスから派生するすべてのクラスである可能性があります。例えば:

public class Derived1 : Base 
{ 
} 
public class Derived2 : Base 
{ 
} 

TDerived1またはDerived2またはBaseである可能性があります。

Derived1からDerived2にキャストできないため、コンパイラが暗黙のキャストを拒否しています。

obj = obj.Derived as T; // safe explicit cast. 

それ以外は、子クラスを基本クラス内に持つことはお勧めしません。あなたが念頭に置いていることを言うなら、おそらく私たちはあなたに正しい道を与えることができます。

+2

あなたはたぶん 'Tとして' – haim770

関連する問題