C#中使用Getter和Setter简写语法时如何进行数据验证?
C#自动属性能否做数据验证?
直接用public int GrossSallery { get;set; }这种自动属性简写的话,没办法直接添加数据验证逻辑。
这种写法是C#的语法糖,编译器会自动生成一个隐藏的私有字段,get和set方法只是简单读写这个字段,没有留给你插入自定义验证的空间。
你提到的手动扩展属性的方式是实现验证的正确思路,但你给出的示例里,输入值不合法时直接return忽略赋值的处理不够友好——调用方根本不知道赋值失败了,容易引发隐蔽的bug。更合理的做法是抛出明确的异常,让调用方及时感知错误:
private int _grossSalary; public int GrossSalary { get => _grossSalary; set { if (value <= 0) throw new ArgumentOutOfRangeException(nameof(value), "薪资不能小于等于0"); _grossSalary = value; } }
如果想保持代码简洁,C# 6及以上版本可以用表达式体来写get方法,完全不影响验证逻辑的实现。
内容的提问来源于stack exchange,提问作者M.Sohail Shaheen
相关产品推荐
相关产品推荐

