私はこのようなジェネリック関数を持っています:
private LOCAL_TYPE RemoteToLocal<LOCAL_TYPE>(RemoteObjectBaseType remoteObject)
where LOCAL_TYPE: EntityBase
{
Type t = typeof(LOCAL_TYPE);
if (t == typeof(FavoritePlace))
{
return new FavoritePlace(remoteObject as RemotePlaceType1);
}
}
EntityBase
非抽象クラスはどこにありますか。FavoritePlace
クラスはから継承されEntityBase
ます。
ただし、エラーが発生します。
タイプCommon.Model.FavoritePlaceを'LOCAL_TYPE'に暗黙的に変換することはできません。
それは私に不思議に思います:FavoritePlaceはEntityBaseの子であり、LOCAL_TYPEはタイプEntityBaseに制約されています。なぜ変換が行われないのですか?私はおそらくここで重要な何かを見逃しています。
編集:さて、現在の回答といくつかの実験に基づいて、次の変換を行うことである別の回避策を見つけました:
if (t == typeof(FavoritePlace))
{
return (LOCAL_TYPE)(EntityBase)new FavoritePlace(remoteObject);
}
これでコンパイラは満足しています。しかし、コンパイラの観点からそのような変換が可能である場合、なぜLOCAL_TYPEへの直接変換が不可能なのか疑問に思っています。関係推移的関係に変換可能ではありませんか?