wstcl 2025-04-16 16:09 采纳率: 38.1%
浏览 7

下面的代码为什么不能在vs2019中通过编译

如题,以下代码在vs2019中编译无法通过

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static class PersonValidator
{
    public static bool IsValid(Person person) =>
        person switch
        {
            { Age: < 0 } => false, // Age不能为负数
            { Age: > 120 } => false, // Age不能超过120岁
            { Name: null } => false, // Name不能为空
            _ => true
        };
}

class Program
{
    static void Main()
    {
        var person = new Person { Name = "Alice", Age = 130 };
        Console.WriteLine(PersonValidator.IsValid(person)); // 输出: True
    }
}


如图

img


上面代码是不j是c#8.0最新的表达方式,vs2019 16.3 才开始支持(支持.net core3.1和C#8.0),而我的vs2019是16.0(仅支持.net 2.1)导致,我尝试修改.csproj文件netcoreapp3.1,则编译时报错当前 .NET SDK 不支持将 .NET Core 3.1 设置为目标。请将 .NET Core 2.1 或更低版本设置为目标,或使用支持 .NET Core 3.1 的 .NET SDK 版本。这是必须要升级vs2019吗?

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-04-16 16:24
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解答

    您的代码中存在一个小问题,缺少了 Age 的 set 属性。C# 中的自动实现的属性需要在 set 部分提供一个可读的值。

    以下是修复后的代码:

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    

    在 VS2019 中,您可以将代码复制到新的 C# 项目中,然后编译它。代码应该能够通过编译。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月16日