Выражение переключателя в функции Azure вызывает исключение - PullRequest
0 голосов
/ 30 апреля 2020

Написание функции C# Azure и попытка использовать выражения переключения C # 8.

Согласно документам, https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.switchexpressionexception?view=netcore-3.1, они показывают, что это должно быть доступно для. net core 3.1

Этот код, который использует выражение переключения, не работа:

try
{
    var data = (JObject)eventGridEvent.Data;
    IDHT22 sensor = eventGridEvent.EventType switch
    {
        "TemperatureChangedEvent" => new TemperatureSensorEvent(data["sensor_id"].Value<string>(), data["name"].Value<string>(), data["temperature_c"].Value<double>()),
        "HumidityChangedEvent" => new HumiditySensorEvent(data["sensor_id"].Value<string>(), data["name"].Value<string>(), data["humidity"].Value<double>())
    };

    if (sensor != null)
        await sensors.AddAsync(sensor);

}
catch (System.Exception ex)
{
    throw new InvalidOperationException(ex.Message, ex);
}

При выполнении это приводит к этому сообщению об ошибке:

[30.04.2020 19:21:06] Выполнено SaveSensorEvent (Failed, Id = 8db720e1-aa19-4f53-b102-3aaa83f19667) [30.04.2020 19:21:06] System.Private.CoreLib: Исключительная ситуация при выполнении функции: SaveSensorEvent. > SensorData: не удалось загрузить тип 'System.Runtime.CompilerServices.SwitchExpressionException' из сборки 'System.Runtime.Extensions, версия = 4.2.1.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a'.

Если Я использую традиционный переключатель, это все хорошо. Кажется, мне, возможно, понадобится обновить Runtime.Extensions - хотя не знаете, как это сделать в основном приложении. net.

Есть идеи?

1 Ответ

0 голосов
/ 01 мая 2020

Очевидно, в вашем коде отсутствует регистр по умолчанию.

Это должно выглядеть так:

IDHT22 sensor = eventGridEvent.EventType switch
{
    "TemperatureChangedEvent" => new TemperatureSensorEvent(data["sensor_id"].Value<string>(), data["name"].Value<string>(), data["temperature_c"].Value<double>()),
    "HumidityChangedEvent" => new HumiditySensorEvent(data["sensor_id"].Value<string>(), data["name"].Value<string>(), data["humidity"].Value<double>()),
    _     => balabala
};
...