2013-03-05 107 views
4

我有以下對象,在我的構造函數中添加一個新的Guid作爲Id。C#對象初始化程序:從另一個設置屬性

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 
} 

這可能嗎?

回答

8

不,你不能那樣做。你必須設置它在一個單獨的語句:

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

在對象初始屬性的右手邊就是一個普通的表達,與對象沒有內在的聯繫被初始化。

如果這是你經常要與一個特定類型的做一些事情,你可以添加一個方法:

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

,然後使用:

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

或與其他屬性:

MyObject obj = new MyObject 
{ 
    // Set other properties here 
}.CopyIdToTest(); 
1

否 - 您無法在初始化程序中訪問對象的屬性。初始化程序基本上是程序員的一些語法糖。

考慮類似的情況:

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

Id你分配(如果你的想法是有效的,這再次,它是不是)不一定是Id你會得到。

+1

請注意構造函數*具有在執行初始化程序的「屬性設置」部分之前完成的操作。 – 2013-03-05 17:06:30

+0

是的 - 我正在將初始化與構造混爲一談。爲了清晰起見,我會編輯,謝謝。 – 2013-03-05 17:37:11

相關問題