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
        };
    }
}

理解していただければ幸いです。もちろん、ストリームがシーク可能な場合は、1 バイトをシークして再読み込みし、呼び出しているメソッドの引数として渡すことができます。しかし、ストリームがシークできない場合は、仕方がありません。

もちろん、これは非常に基本的な例です。私の実際のシナリオでは、FromStream を実装したいクラスにはさまざまなプロパティがあります。

オブジェクト初期化ブロック内から影響を受けるプロパティ値を基本的に再利用して、私がやろうとしていることを実行できるキーワードはありますか?

そうでない場合、私にとって唯一の方法は、このコンテキストでオブジェクト初期化子を使用せず、そのプロパティに1つずつ影響する新しいオブジェクトを構築することだと思います(必要に応じて影響を受けるプロパティを再利用できるように)。そして、オブジェクト初期化子でこの特定のシナリオのキーワードを持っている (または再利用する) のはいいことではないでしょうか? そうでない場合、なぜですか?

ありがとう !

4

1 に答える 1

0

一時変数を使用すると、コードがより明確になると思います。

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

Byteまたは、 (プライベート) コンストラクターとして aを使用することもできます。

于 2012-08-03T00:50:39.043 に答える