2014-05-05 17 views
0

我有一些這樣的代碼:分配一個新的對象,首先調用的方法,在一行

SomeObject someObject = new SomeObject(); 
someObject.Initialize(); 
this.Object = someObject; 

我(而懶洋洋地)喜歡把它寫在一行,也許是這樣的:

this.Object = new SomeObject() { Initialize(); }; 

這是目前可能或可能計劃爲C#6.0嗎?或者這只是一個非常糟糕和懶惰的想法?

+0

僅供參考鬆開C#5.0已經in.Net4.5與VS2012 –

+0

這當然是不可能在目前的C#(5.0)。只有屬性可以像那樣初始化(稱爲對象初始化)。我不相信在下一個計劃版本中可能會有這種可能。 –

+0

哎呀!那麼我的意思是6.0。謝謝@SriramSakthivel –

回答

3

它不是直接可能的,但你可以創建一個小幫手:

public class Helper<T> where T : new() 
{ 
    public static T Init(Action<T> body) 
    { 
     T obj = new T(); 
     body(obj); 
     return obj; 
    } 
} 

然後:

this.Object = Helper<SomeClass>.Init(obj => obj.Initialize()); 

或更復雜的情況:

this.Object = Helper<SomeClass>.Init(obj => { 
    obj.Initialize(); 
    obj.SomeOtherMethod(); 
    ... 
}); 
+0

+1我當然不會想出如何自己做到這一點。非常有幫助,謝謝! –

1

你可以這樣做:

this.object = (new SomeOjbect()).Initialize(); 

,但你必須通過添加編輯initialize()方法「返回這個」

+3

不需要額外的括號。 –

+0

確實如此。但我發現這種方式更可讀,更容易理解正在發生的事情。不過謝謝你。 – TamerM

1

你可能已經嘗試過了,你會發現,這是目前不可能。在我看來,這絕對不是必需的,會降低可讀性。你可以做很多其他的事情,比如把它放在你的構造函數中。

除非Initialize方法返回SomeObject,否則不能說this.Object = new SomeObject().Initialize();就像其中一個答案指定的那樣。

+0

我已經試過了,並且找不到任何方法來完成它,因此我的問題旨在詢問是否有可能以另一種方式進行。 –

+0

就像我說的那樣,這是不可能的,但是阻止你將該方法放入構造函數中? – Lynx

+0

是的,把它放到構造函數中可能是最好的方法,因爲有人已經在[comment]中提出了建議(http://stackoverflow.com/questions/23468029/assign-a-new-object-that-c​​alls-a - 方法第一單線#comment35979269_23468029),我是一個白癡(沒有諷刺意圖)沒有想到這一點。 –

1

正如我所提到的註釋,可以在類構造函數中使用方法:

public class SomeObject 
{ 
    public SomeObject() 
    { 
     Initialize(); 
    } 
    public void Initialize() 
    { 
     //do initialization stuff 
    } 
} 

但是,您不應該在構造函數中調用虛擬方法。

更多信息:http://msdn.microsoft.com/en-us/library/ms229060.aspx

相關問題