Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用反射动态设置事件处理程序_C#_.net_Reflection - Fatal编程技术网

C# 如何使用反射动态设置事件处理程序

C# 如何使用反射动态设置事件处理程序,c#,.net,reflection,C#,.net,Reflection,我想在伪代码中动态设置自定义事件处理程序列表,如下所示: FieldInfo[] fieldInfos = this.GetType().GetFields( BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach (FieldInfo fieldInfo in fieldInfos) { if this.fieldInfo.GetType() = TypeOf(

我想在伪代码中动态设置自定义事件处理程序列表,如下所示:

FieldInfo[] fieldInfos = this.GetType().GetFields(
     BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);

foreach (FieldInfo fieldInfo in fieldInfos)
{
    if this.fieldInfo.GetType() = TypeOf(CustomEventHandler<this.fieldInfo.Name>) {
        this.fieldInfo.Name += new CustomEventHandler<this.fieldInfo.Name>(OnChange<this.fieldInfo.Name>);
    }
}
FieldInfo[]fieldInfos=this.GetType().GetFields(
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach(FieldInfo中的FieldInfo)
{
如果this.fieldInfo.GetType()=TypeOf(CustomEventHandler){
this.fieldInfo.Name+=新的CustomEventHandler(OnChange);
}
}

我找不到正确的语法,可以吗?

用GetEvents代替GetFields怎么样

    var t = something.GetType();

    var eventInfos = t.GetEvents();

    foreach (var info in eventInfos)
    {
        if (info.EventHandlerType == TypeOf(CustomEventHandler<this.fieldInfo.Name>)
                info.AddEventHandler(...);                
    }
var t=something.GetType();
var eventInfos=t.GetEvents();
foreach(eventInfos中的var信息)
{
if(info.EventHandlerType==TypeOf(CustomEventHandler)
信息。AddEventHandler(…);
}
我不能完全确定类型比较,但再一次强调,
fieldInfo.Name
不能用于这样的泛型。

使用type.GetEvents(),而不是GetFields()。然后可以使用EventInfo.AddEventHandler()