使用 get 属性 时省略左值
Omit lvalue when using get property
我有一个构建器可以帮助我构建中央字符串。该构建器包含关键字的方法和特殊字符的属性,例如:
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 访问 属性 并且 什么都不做 因为它不是有效的语句(代码行)。您的 属性 returns MyBuilder 实例,您应该以某种方式使用它(分配给某个字段,将其作为参数传递给方法等等)。
Is it possible to use property like in invalid example or in similar
way (like, just C - bld.C - without parentheses)?
恐怕不是因为 属性 get
访问器只能用来获取值,这个值必须以某种方式使用...
然而,可以做的是创建这样的属性列表:
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;
}
我有一个构建器可以帮助我构建中央字符串。该构建器包含关键字的方法和特殊字符的属性,例如:
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 访问 属性 并且 什么都不做 因为它不是有效的语句(代码行)。您的 属性 returns MyBuilder 实例,您应该以某种方式使用它(分配给某个字段,将其作为参数传递给方法等等)。
Is it possible to use property like in invalid example or in similar way (like, just C - bld.C - without parentheses)?
恐怕不是因为 属性 get
访问器只能用来获取值,这个值必须以某种方式使用...
然而,可以做的是创建这样的属性列表:
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;
}