動的キャストを行うために他の回答のいくつかを読んだことがありますが、解決したい状況にそれらが対処しているかどうかわからないため、質問です。
私はインターフェースを持っています
public interface ICustomTransmitter<T> : IDataTransmitter where T : EventArgs
{
event EventHandler<T> DataEvent;
}
実行時にジェネリック型引数を取得できる関数のセット。これは、そのタイプにキャストし、特定のイベントをフックするためです (これは考えられたコードなので、優しくしてください)。
public bool IsTypeOf(Type baseType, Type interfaceType,
out Type argumenType)
{
var interfaces = baseType.GetInterfaces();
argumenType = null;
foreach (Type @interface in interfaces)
{
if (@interface.Name != interfaceType.Name) continue;
if (@interface.IsGenericType)
{
argumenType = @interface.GetGenericArguments()[0];
}
return true;
}
return false;
}
そして、上記の魔法を使う関数
Type argument;
var generic = typeof (ICustomTransmitter<>);
if (IsTypeOf(receiver.GetType(),generic ,out argument))
{
var created = generic.MakeGenericType(new[] {argument});
//the line of code missing is below
receiver as created
}
レシーバーをその作成されたタイプにキャストすることは可能ですか? また、ドット ネット 3.5 とドット ネット 4 の両方で機能するソリューションが必要です。