2012-02-16 58 views
1

我想知道是否有任何方法可以在自動構造函數/對象初始化塊中放置斷點?我如何分解C#自動構造函數塊?

例子:

var x = new Person() 
{ 
    Name = 'John', 
    Age = DateTime.Now - Birthdate 
} 

我希望把斷點4號線。當爲每個屬性設置150個不同邏輯的字段並且您創建實例的類型不受您的控制(例如EF4實體)時,這非常有用,因此您無法創建自定義構造函數。有任何想法嗎?

+0

可能的重複[如何正確使用斷點時使用花哨的對象初始化](http://stackoverflow.com/questions/5112782/how-can-i-properly-use-breakpoints-when-using-fancy-對象初始化器) – 2012-02-16 07:48:59

+1

Nitpick - 這被稱爲對象初始化器。重要的是要注意,這些屬性不是在施工時設定的。施工後立即設置。這只是用於創建實例的語法糖(在上例中使用默認構造函數),然後立即分配屬性。 – 2012-02-16 07:54:53

+1

Nitpickier :) - 與之不同的是:在對象初始值設定項下,在表面下創建一個臨時對象,將所有屬性設置爲可見對象(人)。不同的是,在未定義的狀態下永遠不會有人物對象。 – 2012-02-16 08:18:21

回答

4

一種變通方法,你可以使用這個問題寫這樣的代碼,以減輕你的調試:

var x = new Person(); 
x.Name = "John"; 
x.Age = DateTime.Now - Birthdate; 
0

如果你這樣做,然後這樣,你不能。您可以在整個塊上輸出一個斷點,然後使用F11逐步執行。

你爲什麼不這樣做就行,你想在一個自調用函數斷點以下

Person p = new Person(); 
p.Name = "John"; 
p.//Blah 
1

裹值:

var x = new Person() { 
    Name = new Func<string>(() =>"John").Invoke(), 
    Age = DateTime.Now - Birthdate 
}; 

現在,您將能夠「一步成「它。儘管如此,它並沒有多大用處,因爲在塊結束之前x將保持爲空。

1

如果Name屬性不是自動的,你可以在該屬性的set中放置一個斷點。