[英]Conditional operator in Linq Expression causes NHibernate exception
[英]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.