我已閱讀其他一些答案以進行動態強制轉換,但我不確定它們是否解決了我想解決的問題,因此提出了問題。動態強制轉換爲通用接口類型
我有一個接口
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都可以使用。
我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
謝謝@JohnSaunders,注意到 – Bernard