Преобразование C# 8.0 в C# 7.0 - PullRequest
0 голосов
/ 16 марта 2020

Я собирался использовать приведенный ниже код 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, так как я не могу заставить его работать?

1 Ответ

11 голосов
/ 16 марта 2020

В долгосрочной перспективе вам, безусловно, лучше обновить сервер сборки. Рано или поздно вам все равно придется это сделать.

C# 8.0 содержит , используя объявления , которые преобразуют это:

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();
}
...