从对象初始值设定项中重用属性值

时间:2012-08-03 00:48:12

标签: c#

首先,对于我的问题的有趣标题感到抱歉,希望一个暴露我的问题的代码示例将澄清事情。

下面你会发现一个不编译的代码示例(我完全理解为什么,不需要解释),但是它暴露了我想要实现的目标:

public class Cmd
{
    public Byte MyByte { get; set; }
    public Byte MyOtherByte { get; set; }
    public String MyString { get; set; }

    public static Cmd FromStream(Stream stream)
    {
        return new Cmd
        {
            MyByte = (Byte)stream.ReadByte(),
            MyOtherByte = (Byte)stream.ReadByte(),
            MyString = SomeMethodBasedOnMyOtherByte(MyOtherByte) // Here
        };
    }
}

我希望你明白这个主意。当然,如果流是可搜索的,我可以回寻一个字节并重新读取它以将其作为我调用的方法的参数传递。但如果流不可寻找,那就没办法了。

这是一个非常基本的例子,在我的实际场景中,我想要实现FromStream的类有许多不同的属性。

是否有任何关键字允许执行我想要做的事情,基本上是在对象初始化程序块中重用受影响的属性值?

如果不是,我想对我来说唯一的方法就是不在这个上下文中使用对象初始值设定项,并逐个构造一个影响它的属性的新对象(这样我可以根据需要重用受影响的属性) 。在对象初始化程序中为这个特定场景拥有(或重用)关键字是不是很好?如果没有,为什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为拥有一个临时变量可以使你的代码更清晰。

    Byte myByte = (Byte)stream.ReadByte();
    return new Cmd
    {
        MyByte = myByte,
        MyString = SomeMethodBasedOnMyFirstByte(myByte)
    };

或者,您可以将Byte作为(私有)构造函数。