wstcl 2025-04-16 16:26 采纳率: 38.1%
浏览 17
已结题

如下代码为什么不能在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

据说c#8.0要vs2019 16.3以上才支持,而目前版本是16.0,我安装了.net core3.1,然后编辑csprojnetcoreapp3.1,编译时又出现当前 .NET SDK 不支持将 .NET Core 3.1 设置为目标。请将 .NET Core 2.1 或更低版本设置为目标,或使用支持 .NET Core 3.1 的 .NET SDK 版本,所以在不升级vs2019 的情况下有办法解决吗,

  • 写回答

6条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2025-04-16 16:36
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    根据您提供的信息,下面是关于您遇到的问题的分析及解决方案。

    问题分析

    1. 编译错误
      • 您的代码示例中,出现了一个关于 switch 语法的使用问题。看起来您在使用 C# 8.0 的新特性 switch 表达式,但当前使用的 Visual Studio 版本不支持这些特性。
    2. VS2019 版本过低
      • C# 8.0 的支持需要 Visual Studio 2019 版本 16.3 或更高版本,您目前使用的版本是 16.0,因此出现了兼容性问题。
    3. .NET Core 3.1 支持问题
      • 您的 .NET SDK 版本未能支持 .NET Core 3.1,而是限制在 .NET Core 2.1 或更低版本,这意味着您无法使用 C# 8.0 的特性。

    解决方案

    1. 升级 Visual Studio
      • 推荐您升级 Visual Studio 2019 至版本 16.3 或更高版本,这样可以支持 C# 8.0 和 .NET Core 3.1。建议使用 Visual Studio Installer 进行升级。
    2. 使用较低版本的特性
      • 如果您无法升级 Visual Studio,可以将代码修改为不使用 C# 8.0 的特性,以下是修改后的代码示例:
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    public static class PersonValidator
    {
        public static bool IsValid(Person person)
        {
            if (person.Age < 0)
                return false; // Age不能为负数
            if (person.Age > 120)
                return false; // Age不能超过120岁
            if (person.Name == null)
                return false; // Name不能为空
            return true;
        }
    }
    class Program
    {
        static void Main()
        {
            var person = new Person { Name = "Alice", Age = 130 };
            Console.WriteLine(PersonValidator.IsValid(person)); // 输出: False
        }
    }
    

    关键点总结:

    • 优先选项:尽量升级您的开发环境(VS 版本以及 .NET SDK),这样可以直接使用新特性。
    • 兼容代码:当无法升级时,建议使用兼容的编程特性以便于您的代码可以正常编译和运行。 希望这些信息能够帮助您顺利解决问题!如有任何进一步疑问,欢迎随时询问。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 创建了问题 4月16日