2016-04-08 43 views
19

我在回顧一些我不認識的對象初始化模式的代碼 - 任何人都可以告訴我這個模式叫什麼(以及在哪裏可以找到使用文檔)?這個對象的初始化模式叫做什麼?

obj.myType = (myVar = new MyType()); 

萬一重要,具體使用情況如下;

protected MyType myVar; 
protected readonly MyComplexType myComplexType; 

protected void Page_Init(object sender, EventArgs e)) { 
    ... 
    myComplexType.myType = (myVar = new MyType()); 
    ... 
} 
+1

一個這種情況下是懶惰的字段:'{返回FLD? (fld = new C()); }'。一旦你習慣了這個,它是一個很好,簡潔的捷徑。 – usr

+2

我會將這種模式稱爲「錯誤代碼」 – Mick

回答

19

這只是分配相同的值兩次 - 一次到myVar而一旦myComplexType.myType

這相當於

​​

(在一些複雜的情況下,有可能是類型轉換對那裏發生的,但我不認爲會有任何在這種特殊情況下)。

你不當然,不需要使用額外的局部變量。此代碼是「有點相當於」但涉及到從myVar看了那麼是不是正是相當,但更可能是你想要的使用:

myVar = new MyType(); 
myComplexType.myType = myVar; 

有這個沒有具體的名字,它的相對很少在其他地方使用的分配結果在表達式中,最常見的例子是:

string line; 
while ((line = reader.ReadLine()) != null) 
{ 
    ... 
} 
+1

那麼我想沒有理由使用它? – smoksnes

+6

@smoksnes:這是將相同的值分配給兩個變量的較短的方式......您是否喜歡它是否與速記是不同的。 –

+1

我贊成可讀性,所以對於像這樣的罕見模式,我不得不同意@smoksnes –