c#修改getter / setter但保留简短形式

时间:2014-10-24 00:02:43

标签: c# setter getter

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

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

而不是

public string Property { get; set; }

6行代替1.有没有办法插入逻辑,但保持浓缩和优雅?

5 个答案:

答案 0 :(得分:6)

自动属性(或"简短形式")可以有访问修饰符,但没有逻辑。你坚持使用你拥有的代码。

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

答案 1 :(得分:5)

不,这种情况没有语法糖(至少达到C#5.0 - 2014年的最新情况)。

您可以采用不同的方式对其进行格式设置,如果它看起来不错,请使用?:代替if

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

答案 2 :(得分:2)

这不完全是您的要求,但也许您可以使用DataAnnotations,因为不允许空字符串。像这样的东西,在这种情况下,如果属性为null,空字符串("")或仅包含空格字符,则会引发验证异常。

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

答案 3 :(得分:1)

你总能这样做。

它确实压缩它,但没有提供这种方式的性能提升。

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

答案 4 :(得分:0)

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

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