使用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 -没有括号)?

使用get属性时省略左值

修改如下:

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;
        }