首页 > 解决方案 > 将 C# 8.0 转换为 C# 7.0

问题描述

我正要使用下面的 C# 代码。

await using (var producerClient = new EventHubProducerClient(ConnectionString, EventHubName))
{
    using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
    eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(eventData)));
    await producerClient.SendAsync(eventBatch);
}

但是在构建服务器中,这会失败,因为上面是 C# 8.0 代码,并且构建服务器仅支持 C# 7.0 代码。有人可以帮我将上面的代码从 C# 8.0 转换为 C# 7.0,因为我无法让它工作吗?

标签: c#asynchronousasync-awaitusingc#-7.0

解决方案


从长远来看,更新构建服务器肯定会更好。无论如何,您迟早需要这样做。

C# 8.0 有using 声明,它改变了这个:

using var x = ...;
...

进入这个:

using (var x = ...)
{
  ...
}

此代码中的另一个 C# 8.0 功能是await using它将代码转换如下:

await using (var x = ...)
{
  ...
}

变成类似于这样的东西:

var x = ...;
try
{
  ...
}
finally
{
  await x.DisposeAsync();
}

手动应用这两种转换可以为您提供:

var producerClient = new EventHubProducerClient(ConnectionString, EventHubName);
try
{
  using (EventDataBatch eventBatch = await producerClient.CreateBatchAsync())
  {
    eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(eventData)));
    await producerClient.SendAsync(eventBatch);
  }
}
finally
{
  await producerClient.DisposeAsync();
}

推荐阅读