4

次のオブジェクトがあり、コンストラクターでIDとして新しいGuidを追加します。

public class MyObject
{
  public MyObject()
  {
    Id = Guid.NewGuid().ToString();
  }

  public String Id { get; set; }
  public String Test { get; set; }

}

オブジェクト初期化子でそのようなことをしたい:

var obj = new MyObject
{
  Test = Id; // Get new GUID created in constructor
}

出来ますか?

4

2 に答える 2

7

いいえ、できません。別のステートメントで設定する必要があります。

var obj = new MyObject();
obj.Test = obj.Id;

オブジェクト初期化子のプロパティの右側は単なる通常の式であり、初期化されるオブジェクトへの固有の接続はありません。

これが 1 つの特定のタイプで定期的に実行したい場合は、メソッドを追加できます。

public MyObject CopyIdToTest()
{
    this.Test = Id;
    return this;
}

そして、次を使用します。

MyObject obj = new MyObject().CopyIdToTest();

または他のプロパティで:

MyObject obj = new MyObject 
{
    // Set other properties here
}.CopyIdToTest();
于 2013-03-05T16:35:18.387 に答える
1

いいえ -- イニシャライザ内でオブジェクトのプロパティにアクセスすることはできません。イニシャライザは、基本的にプログラマにとっては構文糖衣です。

次のような状況を考慮してください。

class Program
{
    static void Main()
    {
     var Id = "hello";
    var obj = new MyObject
        {
            Test = Id // Get new GUID created in constructor
        };
    }
}

あなたIdが割り当てるもの (あなたのアイデアが有効だったとしても、そうではありません) は、必ずしもId得られるものではありません。

于 2013-03-05T16:40:44.813 に答える