我有一个帮助我构建centrain字符串的构建器。构建器包含特殊字符的关键字和属性的方法,例如:
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
- 没有括号)?
答案 0 :(得分:1)
改变这个:
bld.KeyWord_1("some value").C;
要:
bld = bld.KeyWord_1("some value").C;
说明: 这样做的原因是你不能只通过getter访问属性而什么都不做因为它不是一个有效的语句(代码行)。您的属性返回MyBuilder的实例,您应该以某种方式使用它(分配给某个字段,将其作为参数传递给方法,等等)。
是否可以使用无效示例或类似的属性 方式(比如,只是C - bld.C--没有括号)?
我担心这不是因为属性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;
}