2012-08-03 73 views
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的類有很多不同的屬性。

是否有任何關鍵字可以做我正在嘗試做的事情,基本上是從對象初始化程序塊中重用受影響的屬性值?

如果不是,我猜對我來說唯一的方法就是不要在這個上下文中使用對象初始值設定項,並逐個構造一個影響它的屬性的新對象(以便我可以在需要時重新使用受影響的屬性)。在對象初始化器中爲這個特定場景設置(或重新使用)關鍵字不是很好嗎?如果不是,爲什麼?

謝謝!

回答

0

我覺得有一個臨時可用的代碼會讓你的代碼更加清晰。

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

相關問題