は私がList<IMyInterface>
...型パラメータ - 型Tからコンクリートの型を取得:IMyInterfaceという
があると、私は3つのIMyInterface
を実装するクラスがあります:MyClass1
、MyClass2
、およびMyClass3
を私は読み取り専用辞書を持っています:私は別のインターフェイスを持って
private static readonly Dictionary<Type, Type> DeclarationTypes = new Dictionary<Type, Type>
{
{ typeof(MyClass1), typeof(FunnyClass1) },
{ typeof(MyClass2), typeof(FunnyClass2) },
{ typeof(MyClass3), typeof(FunnyClass3) },
};
、IFunnyInteface<T> where T : IMyInterface
public static IFunnyInterface<T> ConvertToFunnyClass<T>(this T node) where T : IMyInterface
{
if (DeclarationTypes.ContainsKey(node.GetType())) {
IFunnyInterface<T> otherClassInstance = (FunnyInterface<T>) Activator.CreateInstance(DeclarationTypes[node.GetType()], node);
return otherClassInstance;
}
return null;
}
:
私は方法があります。私はそれがどのオブジェクトであるかを知りたくありません。パラメータとしてMyClassを使ってFunnyClassをインスタンス化したいだけです。私はConvertToFunnyClassを呼び出すときにいない(T
がタイプIMyInterface
のものであり、私はFunnyInterface<T>
にキャストしようとすると、それは私が私の現在の回避策FunnyInterface<IMyInterface>
に、例えば、FunnyClass1
を変換することができないと言い、何が起こる
美しい1)は、このです:
public static dynamic ConvertToFunnyClass<T>(this T node) where T : IMyInterface
{
if (DeclarationTypes.ContainsKey(node.GetType())) {
var otherClassInstance = (FunnyInterface<T>) Activator.CreateInstance(DeclarationTypes[node.GetType()], node);
return otherClassInstance;
}
return null;
}
そして、戻り値の型がdynamic
あるので、私はそれを好きではないので、私はどこか別の場所からアクセスするとき、私はそれが何であるかの種類が分からない、と私は失いますインテリセンス、物事。私はパフォーマンスの影響についても知らない。
手がかりはありますか?
ありがとうございました!
解像度
私はC#4.0を使用していたように、私は、共分散(出力のみ位置)を使用してエラーをキャスト止めることができ、そして私は私のIFunnyInterface
IFunnyInteface<out T> where T : IMyInterface
には、ありがとうございました変更返信
この例では多くのことが起こっているので、キーポイントを逃した場合は私を許してください。 FunnyClass1はIFunnyInterfaceを実装していますか? –
'FunnyClass1'は' IFunnyInterface 'を実装しています。 –