我需要在C#setter中进行一次小检查 - 检查属性是否为空字符串。现在我最终得到了这样的结构:
private string property;
public string Property
{
get
{
return property;
}
set
{
if (value.IsNotEmpty())
{
property = value;
}
}
}
而不是
public string Property { get; set; }
6行代替1.有没有办法插入逻辑,但保持浓缩和优雅?
答案 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;
}