c修改getter/setter,但保留缩写形式

本文关键字:保留 缩写 修改 getter setter | 更新日期: 2023-09-27 18:27:35

我需要在C#setter中做一个小检查-检查属性是否为空字符串。现在我得到了这样的结构:

        private string property;
        public string Property
        {
           get
           {
              return property;
           }
           set
           {
              if (value.IsNotEmpty())
              {
                   property = value;
              }
           }
        }

代替

public string Property { get; set; }

6行而不是1行。有没有办法插入逻辑,但保持其精简和优雅?

c修改getter/setter,但保留缩写形式

自动属性(或"缩写")可以有访问修饰符,但没有逻辑。你被现有的代码卡住了。

可以做的一件事是将string封装在一个对象中,该对象允许从字符串(和到字符串)进行隐式转换,并在分配给基础值之前检查IsNotEmpty。这也不是最优雅的解决方案,但它可能会让你保留语法糖。

不,对于这种情况没有语法糖(至少在C#5.0之前-2014年的最新版本)。

您可以对它们进行不同的格式设置,并使用?:而不是if,如果它对您来说足够好的话:

    public string Property
    {
       get { return property; }
       set { property = value.IsNotEmpty() ? value: property;}
    }

从C#7开始,属性支持箭头语法,使以下内容成为可能:

private string property;
public string Property
{
    get => property;
    set => property = value.IsNotEmpty() ? value : property;
}

这并不是你所要求的,但也许你可以使用DataAnnotations,因为它不允许空字符串。类似于此,在这种情况下,如果属性为null、空字符串(")或仅包含空白字符,则会引发验证异常。

  [Required]
  public string Property { get; set; }

你可以一直这样做。

它确实使它紧凑,但这样做并不能提高性能。

    private string property;
    public string Property { get { return property; } set { if (value.IsNotEmpty()) property = value; } }