Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 为.NET 4编写的代码为.NET 3.5客户端返回错误_C#_.net_Vb.net_Irc - Fatal编程技术网

C# 为.NET 4编写的代码为.NET 3.5客户端返回错误

C# 为.NET 4编写的代码为.NET 3.5客户端返回错误,c#,.net,vb.net,irc,C#,.net,Vb.net,Irc,我正在尝试获取一个为.NET4编码的库,并重新编译它以使用.NET3.5客户端。图书馆在 这是我的程序中的代码块,在调用外部库中的Irc.ChannelMessage时出错 Private Sub irc_ChannelMessage(Channel As String, User As String, Message As String) Handles irc.ChannelMessage rtbOutput.Clear() rtbOutput.Text

我正在尝试获取一个为.NET4编码的库,并重新编译它以使用.NET3.5客户端。图书馆在

这是我的程序中的代码块,在调用外部库中的Irc.ChannelMessage时出错

  Private Sub irc_ChannelMessage(Channel As String, User As String, Message As String) Handles irc.ChannelMessage
        rtbOutput.Clear()
        rtbOutput.Text = Message
        If rtbOutput.Text.StartsWith("!Listen ") Then
            Dim s As String = rtbOutput.Text
            Dim pars As New List(Of String)(s.Split(" "c))

            CheckParams(pars)
        End If
    End Sub
当我的程序设置为使用.NET 4时,该库适用于我的程序,但是当我将其设置为使用.NET 3.5客户端时,它返回以下错误

错误4方法“私有子irc\u ChannelMessageChannel作为字符串,用户” 作为字符串,消息作为字符串“无法处理事件”公共事件 ChannelMessagesender作为对象,e作为 TechLifeForum.ChannelMessageEventArgs'因为它们没有 兼容签名

似乎一旦我为.NET 3.5编译它,IrcClient.cs就无法正确地将其转换为EventArguments.cs

在IrcClient.cs中,我们正在呼叫

 public event EventHandler<ChannelMessageEventArgs> ChannelMessage = delegate { };

但是,它只能在.NET 4中工作。有什么想法吗?

当设置事件处理程序句柄关键字时,方法的签名,换句话说,传递给方法的变量必须与事件的签名匹配

您的活动签名为C:

EventHandler<ChannelMessageEventArgs> ChannelMessage
您试图用以下签名错误地处理此事件:

irc_ChannelMessage(Channel As String, User As String, Message As String)
这三个变量包含在ChannelMessageEventArgs类中,并一起传递,因此您可以将事件处理方法更改为:

Private Sub irc_ChannelMessage(EventArgs As ChannelMessageEventArgs) Handles irc.ChannelMessage
    rtbOutput.Clear()
    rtbOutput.Text = EventArgs.Message
    If rtbOutput.Text.StartsWith("!Listen ") Then
        Dim s As String = rtbOutput.Text
        Dim pars As New List(Of String)(s.Split(" "c))

        CheckParams(pars)
    End If
End Sub

为什么不修改irc_ChannelMessage使其具有兼容的签名。@USR,因为我需要EventArgs将发出的irc信息,而不是此引用的对Event Args的调用,因为我说过代码在.Net 4中运行良好,但当切换到.Net 3.5时,此错误开始irc信息作为字符串出现在方法参数通道中,用户作为字符串,消息作为字符串。为什么你不能用那个?@USR,我正试着用那个。假设它被事件arg引用:public event EventHandler ChannelMessage=delegate{};但是,它不会转到事件参数
irc_ChannelMessage(Channel As String, User As String, Message As String)
Private Sub irc_ChannelMessage(EventArgs As ChannelMessageEventArgs) Handles irc.ChannelMessage
    rtbOutput.Clear()
    rtbOutput.Text = EventArgs.Message
    If rtbOutput.Text.StartsWith("!Listen ") Then
        Dim s As String = rtbOutput.Text
        Dim pars As New List(Of String)(s.Split(" "c))

        CheckParams(pars)
    End If
End Sub