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

any*_*ots 5 c# getter setter

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

        private string property;
        public string Property
        {
           get
           {
              return property;
           }
           set
           {
              if (value.IsNotEmpty())
              {
                   property = value;
              }
           }
        }
Run Code Online (Sandbox Code Playgroud)

代替

public string Property { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

Bra*_*NET 6

没有

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

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


Ale*_*kov 5

不,这种情况没有语法糖(至少高达C#5.0 - 2014年的当前情况).

可以不同的方式格式化它们,并使用?:替代if,如果它看起来对你不够好:

    public string Property
    {
       get { return property; }
       set { property = value.IsNotEmpty() ? value: property;}
    }
Run Code Online (Sandbox Code Playgroud)