特性 | required 关键字 |
[Required] 特性 |
---|---|---|
作用阶段 | 编译时 | 运行时 |
检查机制 | 编译器强制检查 | 通过验证框架触发 |
目标 | 确保对象初始化完整性 | 数据模型验证 |
依赖 | C# 11+ 编译器 | System.ComponentModel.DataAnnotations |
可空性处理 | 强制初始化(避免 null ) |
检查 null /空字符串 |
自定义错误消息 | 不支持 | 支持 |
适用场景 | 类型设计(不可变对象) | Web API/表单验证 |
常见问题
Q:能否同时使用两者?
可以,但通常不必要:
public class Product
{[Required(ErrorMessage = "ID is required")]public required string Id { get; init; } // 编译时 + 运行时双重检查
}
required
确保编译时初始化。[Required]
在运行时额外验证(例如从数据库加载数据时)。
Q:如何选择?
- 需要编译时安全(避免忘记初始化)→ 用
required
。 - 需要运行时验证(如用户输入)→ 用
[Required]
。
💡 简单记忆:
required
= 对开发者强制约束(写代码时)[Required]
= 对数据校验(运行时)