重新使用对象初始值设定项中的属性值

问题描述:

首先感谢我的问题的耐人寻味的标题,希望暴露我的问题的代码示例将澄清事情。重新使用对象初始值设定项中的属性值

下面你会发现一个代码示例,不编译(我完全明白为什么,没有必要解释),但它暴露了什么我想实现:

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

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

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

谢谢!

我觉得有一个临时可用的代码会让你的代码更加清晰。

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

或者,你可以采取Byte作为一个(私人)构造函数。

+0

谢谢。然而,在这个非常简单的示例中,它会起作用,但在我的实际情况中,该字节不是从流中读取的第一个东西。我已更新我的代码示例以显示它无法使用临时变量的事实。 – darkey 2012-08-03 00:53:32

+0

@darkey - 然后我会在构造函数中初始化它。 – 2012-08-03 00:57:41

+0

非常laaaaaate标记为答复:(谢谢! – darkey 2012-12-19 02:39:15