我已阅读其他一些答案以进行动态强制转换,但我不确定它们是否解决了我想解决的问题,因此提出了问题。动态强制转换为通用接口类型
我有一个接口
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