使用C# required关键字时编译器报错求助
解决C# Preview版Required关键字编译错误的方案
问题根源
你遇到的CS0656错误,是因为required关键字作为C# 11的预览特性,依赖的三个特性类(RequiredMemberAttribute、CompilerFeatureRequiredAttribute、SetsRequiredMembersAttribute)并未包含在当前使用的.NET SDK版本中,编译器找不到这些必要的类型定义。
解决办法
1. 升级.NET SDK到对应预览版本
VS 2022 17.3.1适配的C# 11预览特性需要搭配**.NET 7 Preview SDK**(至少Preview 7及以上)使用:
- 安装对应版本的.NET 7 Preview SDK
- 修改项目文件的
<TargetFramework>为net7.0,同时保留<LangVersion>preview</LangVersion>配置
2. 手动定义缺失的特性类(临时兼容方案)
如果暂时不想升级SDK,可以在项目中手动添加这些特性类的定义,让编译器识别required语法:
namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)] public sealed class RequiredMemberAttribute : Attribute { } [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] public sealed class CompilerFeatureRequiredAttribute : Attribute { public CompilerFeatureRequiredAttribute(string featureName) { } public bool IsOptional { get; set; } public const string RequiredMembers = "RequiredMembers"; } [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] public sealed class SetsRequiredMembersAttribute : Attribute { } }
注意:这只是临时方案,待正式版SDK发布后,需删除这些自定义类,改用SDK内置的官方类型。
3. 验证项目配置
确保项目文件(.csproj)的配置正确无误:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <LangVersion>preview</LangVersion> </PropertyGroup> </Project>
内容的提问来源于stack exchange,提问作者Scott Collins
相关产品推荐
相关产品推荐

