如何用CommunityToolkit.Mvvm源码生成器实现必填(required)属性?
实现带required修饰符的ObservableProperty
完全可以通过CommunityToolkit.Mvvm的源码生成器实现这个需求,具体操作如下:
确认环境支持条件
- 项目需使用C# 11或更高版本(
required修饰符是C# 11引入的语法特性) - CommunityToolkit.Mvvm包版本升级至8.0及以上(该版本开始支持为生成的属性添加
required相关配置)
- 项目需使用C# 11或更高版本(
标记私有后备字段
在需要生成required属性的私有字段上,同时标注[ObservableProperty]和[property: RequiredMember]特性。[property: RequiredMember]用于告知源码生成器,要给生成的公共属性自动加上required修饰符。代码示例:
using CommunityToolkit.Mvvm.ComponentModel; using System.Runtime.CompilerServices; public partial class UserViewModel : ObservableObject { // 生成的RequiredName属性会携带required修饰符 [ObservableProperty] [property: RequiredMember] private string _requiredName; // 普通可观察属性,无required限制 [ObservableProperty] private int _age; }使用效果说明
源码生成器会自动生成如下结构的属性代码:public required string RequiredName { get => _requiredName; set => SetProperty(ref _requiredName, value); } public int Age { get => _age; set => SetProperty(ref _age, value); }当创建
UserViewModel实例时,必须初始化RequiredName属性,否则编译器会直接报错,强制你在实例化阶段完成赋值:// 正确写法:必须初始化RequiredName var vm = new UserViewModel { RequiredName = "张三" }; // 错误写法:未初始化RequiredName,编译器触发报错 var vm = new UserViewModel();
内容的提问来源于stack exchange,提问作者IFrank
相关产品推荐
相关产品推荐

