簡體   English   中英

Azure Function 中的開關表達式導致異常

[英]Switch expression in an Azure Function causes an exception

編寫 C# Azure function 並嘗試使用 C#8 開關表達式。

根據文檔https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.switchexpressionexception?view=netcore-3.1 ,他們表明這應該適用於 .net 核心 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 : 執行 function 時出現異常:SaveSensorEvent。 > SensorData:無法從程序集“System.Runtime.Extensions,版本=4.2.1.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”加載類型“System.Runtime.CompilerServices.SwitchExpressionException”。

如果我使用傳統的開關,一切都很好。 似乎我可能需要更新 Runtime.Extensions - 雖然不確定如何在 .net 核心應用程序中執行此操作。

有任何想法嗎?

顯然,您的代碼中缺少默認情況。

它應該如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM