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行。有没有办法插入逻辑,但保持其精简和优雅?
无
自动属性(或"缩写")可以有访问修饰符,但没有逻辑。你被现有的代码卡住了。
可以做的一件事是将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; } }