當我工作的一些在C#中的老代碼,我遇到這激怒了我一個代碼。
這裏有許多令人討厭的問題。讓我們把它們全部列出來。
private string foo(string _text)
{
/* some manipulation on _text */
return _text = Server.HtmlDecode(_text);
}
這是這惹惱我
註釋也令人側目的最後一行。局部變量是便宜。沒有必要清除_text
的原始值。相反,創建一個新的局部變量並對其進行操作。這樣,當您在該方法的任何時候調試時,您可以知道原始參數是。 (記住,原始的參數可能有資格進行垃圾回收的時刻變量被覆蓋,因此可能會永遠消失。)
不要寫了一個正式的參數沒有一個很好的理由。這使它更難調試。
賦值運算符的值是左操作數,所以我可以看到它。
在這種情況下,這是正確的,但總的來說是微妙的錯誤;在C#賦值運算符的值是右操作數被轉換到與左手側關聯的類型後的值。請記住,左手邊可能沒有價值;它可能是一個只寫屬性。
在C#中,我需要習慣嗎?
這裏有一個標準的做法,是的。什麼是奇異的有關此用法是(1),所選擇的變量是一個正規的,和(2)的分配與return
組合。
這將是C#標準的做法,說:
string decoded = Server.HtmlDecode(_text);
return decoded;
現在你可能不知道的這個誘人的好處是對你有什麼建議:
return Server.HtmlDecode(_text);
答案是:前Visual Studio 2013中,調試器中沒有設施來檢查方法調用的返回值!因此,如果你想看看通過HtmlDecode
返回的值是在調試時你有以下選擇:在組件級別
- 調試,並期待在EAX的內容
- 步入
HtmlDecode
並檢查其狀態
- 步驟出來的當前方法和檢驗任何返回值被分配到
- 結果分配到另外無用局部變量然後檢查本地在調試器
由於前三個是可怕的,而最後一個很容易,所以許多C#程序員都習慣於這樣做。
如果你這樣做,然後做不使用生成的地方,C#編譯器知道,這是一種常見的做法,故意抑制「你寫信給你,然後從不讀當地的」警告。如果本地有一個常量寫入它,它只會給出警告,在這種情況下,您已經知道它在編譯時是什麼,通常不需要在調試器中檢查它。
希望現在VS2013終於支持這個經常要求的功能,這種模式會逐漸消失。
'_text'絕對不是全局變量,它是方法的參數。 –
這項任務實際上是否有必要?之後您將無法使用'_text'做任何事情,而且很可能會超出範圍。 –
@lc。這正是我所部分要求的;如果它有任何意義。根據我收集的內容,我想不是。 –