Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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#_Events - Fatal编程技术网

C# 向事件订阅泛型方法

C# 向事件订阅泛型方法,c#,events,C#,Events,我在所需事件发生后运行的方法如下: protected virtual void RunThisMethod<T>(object sender, CustomEventArgs<T> e) where T : IMyInterface { //Do something } 我得到了错误 The type arguments for method 'RunThisMethod<T>(object, CustomE

我在所需事件发生后运行的方法如下:

protected virtual void RunThisMethod<T>(object sender, CustomEventArgs<T> e)
        where T : IMyInterface
    {
        //Do something
    }
我得到了错误

The type arguments for method 'RunThisMethod<T>(object, CustomEventArgs<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

您需要确保正确声明事件类型。您需要指定CustomEventArgs而不仅仅是CustomEventArgs。试试这个:

public class CustomEventArgs<T> : EventArgs
{
    public T CustomArgs { get; set; }
}

public class Example<T>
{
    public Example()
    {
        this.MyEvent += this.Handler;
    }

    public event EventHandler<CustomEventArgs<T>> MyEvent;

    private void Handler(object sender, CustomEventArgs<T> args)
    {

    }
}
公共类CustomEventArgs:EventArgs
{
公共T CustomArgs{get;set;}
}
公开课范例
{
公共示例()
{
this.MyEvent+=this.Handler;
}
公共事件事件处理程序;
私有无效处理程序(对象发送方、CustomEventArgs args args)
{
}
}

eventSource.SomeEvent的签名是什么?i、 例如,这是一个普通事件(这样的事情存在吗?)?我用事件签名更新了这个问题。不太清楚事件和代表。他们是“C的指针”,相当于我在网络世界中的地位。谢谢。看来你有答案了。我做了一些研究并回答了我自己的问题,是的,你可以有一般事件,例如…@WaiHaLee你实际上不能有一般事件。在您引用的问题中,涉及一个普通事件,该事件是使用周围类中的类型参数键入的,而不是该事件的类型参数。后者必须不存在,因为它会破坏类型系统,实际上这与泛型字段不存在的原因相同。但如前所述,这与在事件或字段中使用不同范围的泛型类型参数不同。@Georg-Ah-I正确无误。谢谢你让我知道(并纠正了我的错误)。
event EventHandler<CustomEventArgs> SomeEvent ;
public class CustomEventArgs<T> : EventArgs
{
    public T CustomArgs { get; set; }
}

public class Example<T>
{
    public Example()
    {
        this.MyEvent += this.Handler;
    }

    public event EventHandler<CustomEventArgs<T>> MyEvent;

    private void Handler(object sender, CustomEventArgs<T> args)
    {

    }
}