C#无法将Lambda表达式转换为类型“ Delegate”,因为它不是委托类型

时间:2018-07-11 08:25:51

标签: c#

我有以下几种串行通信方法:

private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  int rxLength = this._serialPort.BytesToRead;
  byte[] rxBuf = new byte[rxLength];
  try
  {
    rxLength = this._serialPort.Read(rxBuf, 0, rxLength);
    this.BeginInvoke((Delegate) (() =>
    {
      this._dataRx.AddBytes(rxBuf, 0, rxLength);
      this.AddDataToAscii(rxBuf, rxLength, true);
    }));
  }
  catch (Exception ex)
  {
  }
}

...和

private void _serialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
{
  this.BeginInvoke((Delegate) (() => { AddDataToAscii("\nSerial Error : " + e.EventType.ToString() + "\n", true); }));
}

这两个方法均返回以下错误:     严重性代码说明项目文件行抑制状态     错误CS1660无法将lambda表达式转换为类型“ Delegate”,因为它不是委托类型

如何修改源以定义缺少的委托人类型?

谢谢。

1 个答案:

答案 0 :(得分:1)

Action是.NET框架提供的一种委托类型。该操作指向没有参数的方法,并且不返回任何值。

要使用您的代码,请使用Action替换代码:

private void _serialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
{
  this.BeginInvoke((Action) (() => { 
      AddDataToAscii("\nSerial Error : " + e.EventType.ToString() + "\n", true); }));
}