1

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

您将在下面找到一个无法编译的代码示例(我完全明白为什么,无需解释),但它揭示了我想要实现的目标:

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 的类具有许多不同的属性。

是否有任何关键字可以做我想做的事情,基本上是在对象初始化块中重用受影响的属性值?

如果不是,我想对我来说唯一的方法是不在这种情况下使用对象初始化程序,而是构造一个一个一个影响它的属性的新对象(以便我可以在需要时重用受影响的属性)。在对象初始化器中为这个特定场景使用(或重用)关键字不是很好吗?如果不是,为什么?

谢谢 !

4

1 回答 1

0

我认为拥有一个临时变量将使您的代码更加清晰。

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

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

于 2012-08-03T00:50:39.043 回答