在C#中,重新初始化一個先前聲明的變量而不是聲明和初始化一個新的變量會有好處還是缺點? (忽略的簡潔和易讀性的想法)重新初始化變量或聲明新的?
例如,比較這兩個樣本:
DataColumn col = new DataColumn();
col.ColumnName = "Subsite";
dataTable.Columns.Add(col);
col = new DataColumn(); // Re-use the "col" declaration.
col.ColumnName = "Library";
dataTable.Columns.Add(col);
VS
DataColumn col1 = new DataColumn();
col1.ColumnName = "Subsite";
gridDataTable.Columns.Add(col1);
DataColumn col2 = new DataColumn(); // Declare a new variable instead.
col2.ColumnName = "Library";
gridDataTable.Columns.Add(col2);
一個類似的例子,涉及循環:
string str;
for (int i = 0; i < 100; i++)
{
str = "This is string #" + i.ToString(); // Re-initialize the "str" variable.
Console.WriteLine(str);
}
vs
for (int i = 0; i < 100; i++)
{
string str = "This is string #" + i.ToString(); // Declare a new "str" each iteration.
Console.WriteLine(str);
}
編輯:謝謝大家迄今爲止的答案。閱讀完後,我想我會擴展一下我的問題:
請糾正我,如果我錯了。
當我聲明並初始化一個像System.String這樣的引用類型時,我有一個指向該對象(存在於堆棧上)和該對象的內容(存在於堆中的指針)(只能通過指針訪問)。
在第一個循環示例中,似乎我們只創建一個指針「str」,並且我們創建了100個String類的實例,每個實例都存在於堆中。在我看來,當我們遍歷循環時,我們只是每次更改「str」指針以指向String類的新實例。那些不再有指向他們的指針的「舊」字符串將被垃圾收集 - 儘管我不確定何時會發生這種情況。
在第二個循環示例中,除了創建100個String類實例外,似乎我們還創建了100個指針。
雖然我不確定堆棧上不再需要的物品會發生什麼。我不認爲垃圾收集器也擺脫了這些物品;也許他們一旦退出範圍就立即從堆棧中移除?即使這是真的,我認爲只創建一個指針並更新它指向的內容比創建100個不同的指針更有效,每個指針指向一個唯一的實例。
我明白「過早優化是邪惡的」論點,但我只是試圖獲得對事物的更深入的理解,而不是將我的程序優化爲死亡。
「忽略對人的可讀性的想法」 - 忽略第二個最重要的因素(第一個是「正確性」)可能是做出決定的一個壞方法。 – 2009-07-27 17:35:43
@Eric:我添加了這句話只是爲了勸阻像「這樣做,它更可讀」的答案。當然,我認爲使代碼可讀性至關重要。我只是在尋找更多技術性的答案,就好像是有性能差異一樣。 – 2009-07-27 18:02:03