能否在.NET Framework 4.8及.NET Standard 2.0中使用C#11的required修饰符?
在.NET Framework 4.8/.NET Standard 2.0中使用C#11的required修饰符(VS2022 17.4)
可行,具体操作如下:
切换项目语言版本到C#11
右键项目→属性→生成→高级,将「语言版本」设置为C# 11。VS2022 17.4原生支持C#11,无需额外升级编译器。补充必要的属性定义(或安装NuGet包)
.NET Framework 4.8和.NET Standard 2.0没有内置C#11 required修饰符依赖的RequiredMemberAttribute与CompilerFeatureRequiredAttribute,有两种解决方式:- 手动定义属性:在项目中添加以下代码,编译器仅需这些属性的存在即可正常处理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) => FeatureName = featureName; public string FeatureName { get; } public bool IsOptional { get; set; } } } - 安装NuGet包:通过NuGet安装
System.Runtime包(版本≥6.0),该包包含上述属性的官方实现。
- 手动定义属性:在项目中添加以下代码,编译器仅需这些属性的存在即可正常处理required修饰符:
完成后,就能正常使用required修饰符,编译阶段会强制要求初始化时为标记的成员赋值,基础场景(如对象初始化器、构造函数初始化)在两个框架下均可正常运行。
内容的提问来源于stack exchange,提问作者Matthew Watson
相关产品推荐
相关产品推荐

