【问题标题】:C# Cannot convert lambda expression to type 'Delegate' because it is not a delegate typeC# 无法将 lambda 表达式转换为类型“Delegate”,因为它不是委托类型
【发布时间】:2018-07-11 08:25:51
【问题描述】:

我有以下串行通信方法:

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”,因为它不是委托类型

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

谢谢。

【问题讨论】:

标签: c#


【解决方案1】:

Action 是 .NET 框架提供的委托类型。 Action 指向一个没有参数且不返回值的方法。

在您的情况下,要使您的代码正常工作,请替换为 Action:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多