【问题标题】:C# Class member validation without having Private members没有私有成员的 C# 类成员验证
【发布时间】:2019-12-29 07:53:29
【问题描述】:

有没有办法在 C# 中对没有 Private 成员的类成员进行错误范围检查?

1)

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

public class PageModel
{
    private int page;
    public int Page
    {
        get => page;
        set
        {
            if (value < 0) { page = 0; }
            else page = value;
        }
    }

2)

如果只有 Public 成员,则 get=> 页面行给出 SonarQube 错误

添加一种方法来打破这个属性访问器的递归

public class PageModel
{
    public int Page
    {
        get => Page;
        set
        {
            if (value < 0) { Page = 0; }
            else Page = value;
        }
    }

只是好奇是否有办法在没有私人成员的情况下进行数据验证。数据注释也是好方法吗?他们和私人会员一样安全吗?

【问题讨论】:

标签: c# .net .net-core


【解决方案1】:

在 OP 编辑​​之前回答了问题

属性不是一个字段,它只是以下的简写:

private int <>_page;
public get_Page()
{
    return <>_page;
}

public set_Page(int value)
{
     <>_page = value;
}

所以像这样设置Page 没有任何意义。

public int Page
{
    get => Page;
}

回答你的问题,不,没有办法摆脱额外的领域,因为如果你摆脱了这个领域,就没有什么可写的了。

您必须创建一个方法,例如

public int Page { get; set; }    
public void Validate()
{
    if(Page < 0)
       Page = 0;
}

但是这样做的可能性是无限的。

【讨论】:

  • @ZorgoZ 它含蓄地解释说不可能摆脱私有字段。我会扩大...
  • @ZorgoZ 我认为它回答了这个问题。
  • 在构造函数中我应该在哪里调用 validate 方法?
  • @jerrythomas38 这取决于您如何构建代码,但构造函数是执行此操作的一种方式。如果您在创建对象实例后不更改属性值,那么可以,构造函数可能是正确的地方。
  • 嗨@ZorgoZ,FCin 数据注释是一个不错的选择吗?还有其他方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2017-12-22
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多