gpt4 book ai didi

C# 7 使用模式匹配不起作用

转载 作者:行者123 更新时间:2023-11-30 20:17:51 25 4
gpt4 key购买 nike

我在这里错过了什么。

Visual Studio 告诉我使用内联模式匹配并为我重写代码,但是当它这样做时我得到了错误:

Severity Code Description Project File Line Suppression State Error CS8121 An expression of type TReturnState cannot be handled by a pattern of type LightState. DataModels C:\Users\Michael\Documents\windows\GCMS UWP\Models\Models\Elements\Lights\Light.cs 77 Active

原代码如下:

    public override void UpdateState<TReturnState>(TReturnState returnState)
{
var newState = returnState as LightState;

if (newState != null)
State = newState;

base.UpdateState(returnState);
}

这是 VS 为我重做时的样子。

    public override void UpdateState<TReturnState>(TReturnState returnState)
{
if (returnState is LightState newState)
State = newState;

base.UpdateState(returnState);
}

我更喜欢调整后的方式,但我收到了错误。我是否遗漏了什么或者这是一个错误?

我正在使用的软件包:

  "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.3.1",
"Newtonsoft.Json": "9.0.1",
"System.ValueTuple": "4.3.0"
},

最佳答案

正如@SirRufo 在评论中指出的那样,它似乎是 C# 7 中的一个已知错误。

解决方法是将代码转换为一个对象。

    public override void UpdateState<TReturnState>(TReturnState returnState)
{
if ((object)returnState is SpeakerState newState)
State = newState;

base.UpdateState(returnState);
}

但是;这不是一个真正的修复,而是一个破解错误的方法。 Visual Studio 还告诉我这种转换为对象是不必要的,并尝试修复它,但当它修复时我再次收到错误。

这会阻碍通过 Visual Studio 进行完整代码重构。

Link to known issue posted by Sir Rufo.

编辑:升级到 C# 7.1 修复了模式匹配匿名类型的装箱问题,它现在可以像预期的那样工作而没有开销。

关于C# 7 使用模式匹配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43213313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com