使用get属性时省略左值
本文关键字:时省 get 属性 使用 | 更新日期: 2023-09-27 18:07:04
我有一个构建器,可以帮助我构建中心字符串。构建器包含用于关键字的方法和用于特殊字符的属性,例如:
class MyBuilder
{
private StringBuilder bld;
public MyBuilder() { bld = new StringBuilder(); }
public MyBuilder KeyWord_1(string param)
{
this.bld.Append("Some_Keyword ").Append(param);
return this;
}
public MyBuilder C_()
{
this.bld.Append(',');
return this;
}
public MyBuilder C
{
get { return this.C_(); }
}
}
然后像这样使用
var bld = new MyBuilder();
bld.KeyWord_1("some value").C;
什么明显抛出错误:
error CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
所以我不得不使用:
var bld = new MyBuilder();
bld.KeyWord_1("some value").C_();
是否有可能使用属性,如在无效的例子或以类似的方式(如,只是C
- bld.C
-没有括号)?
修改如下:
bld.KeyWord_1("some value").C;
:
bld = bld.KeyWord_1("some value").C;
解释:这样做的原因是,您不能仅仅通过getter访问property,而什么也不做,因为它不是一个有效的语句(代码行)。你的属性返回MyBuilder的实例,你应该以某种方式使用它(分配给一些字段,将其作为参数传递给方法等)。
是否可以在无效示例或类似示例中使用属性方式(比如,只是C - bldc -没有括号)?
恐怕不是因为属性get
accessor只能用来获取值,这个值必须以某种方式使用…
可以这样创建一个属性列表:
class MyBuilder
{
private StringBuilder bld;
public MyBuilder() { bld = new StringBuilder(); }
public MyBuilder KeyWord_1(string param)
{
this.bld.Append("Some_Keyword ").Append(param);
return this;
}
public MyBuilder C
{
get { this.bld.Append(','); return this; }
}
public MyBuilder D
{
get { this.bld.Append(':'); return this; }
}
public MyBuilder E
{
get { this.bld.Append('-'); return this; }
}
public MyBuilder F
{
get { this.bld.Append('+'); return this; }
}
public MyBuilder G
{
get { this.bld.Append('-'); return this; }
}
}
并在一行中调用你的属性:
static void Main(string[] args)
{
var bld = new MyBuilder();
bld = bld.KeyWord_1("some value").C.D.E.F.G;
}