Azure 函数中的 switch 表达式导致异常

Posted

技术标签:

【中文标题】Azure 函数中的 switch 表达式导致异常【英文标题】:Switch expression in an Azure Function causes an exception 【发布时间】:2020-08-15 06:50:06 【问题描述】:

编写 C# Azure 函数并尝试使用 C#8 开关表达式。

根据文档https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.switchexpressionexception?view=netcore-3.1,他们表明这应该适用于 .net core 3.1

这个使用 switch 表达式的代码不起作用:

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);

执行时会出现以下错误消息:

[4/30/2020 7:21:06 PM] 执行“SaveSensorEvent”(失败,Id=8db720e1-aa19-4f53-b102-3aaa83f19667) [4/30/2020 7:21:06 PM] System.Private.CoreLib:执行函数时出现异常:SaveSensorEvent。 > SensorData:无法从程序集“System.Runtime.Extensions,Version=4.2.1.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”加载类型“System.Runtime.CompilerServices.SwitchExpressionException”。

如果我使用传统的开关,一切都很好。似乎我可能需要更新 Runtime.Extensions - 虽然不确定如何在 .net 核心应用程序中执行此操作。

有什么想法吗?

【问题讨论】:

你不是总是需要在 switch 表达式中使用默认大小写吗? @HansKesting - 哇,伙计,我已经为此烦恼了好几个小时。就是这样。只是缺少一个默认值。呸。谢谢! 【参考方案1】:

显然,您的代码中缺少默认情况。

应该是这样的:

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
;

【讨论】:

以上是关于Azure 函数中的 switch 表达式导致异常的主要内容,如果未能解决你的问题,请参考以下文章

R语言中的switch函数用法

一些语句(switch case...)

Kusto - 如何在 Azure Application Insight 中查找导致 524/5xx 错误的操作/异常?

Azure 函数在 blob 触发期间找不到 blob

具有 Azure 存储的 Azure 函数 - 函数引发异常

Cosmos DB 更改源触发 Azure 函数:租赁丢失异常