使用get属性时省略左值

时间:2015-08-10 08:09:38

标签: c# properties

我有一个帮助我构建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 - 没有括号)?

1 个答案:

答案 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;
        }
相关问题