Net Core:私有成员与数据注释之间的区别 用于数据检查



在类中使用私有成员和数据注释进行数据验证检查有什么区别?一种方式是否经常比另一种方式受益,或者它们只是相同的。我没有意见,只是好奇。

1(

例如,在这里,我需要私人成员(小于/大于检查(。

public class PageModel
{
private int page;
public int Page
{
get => page;
set
{
if (value < 1 || value > 100) { throw new ArgumentException("Number should be between 1 and 100"); }
else page = value;
}
}

2(

public class PageModel
{
[Range(1,100, ErrorMessage="Number should be between 1 and 100")] 
public int Page{get;set;}
}

数据注释是否与私有成员一样安全?

不,有很大的区别。

如果在资源库中引发异常,则无法在不触发验证的情况下设置值。

如果使用数据批注,则仅将元数据添加到属性中,了解如何验证它。但是您需要一些东西来使用此元数据来进行验证。EFCore 或 asp.net 使用此信息进行一些验证。

这意味着,如果您使用第一个实现,则以下代码会引发参数异常,但如果使用数据注释,则会执行。

new PageModel { Page = 300 };

要手动执行数据注释的验证,您必须调用 Validator.TryValidateObject。

最新更新