看板 C_Sharp 關於我們 聯絡資訊
用的是 C# 5.0, .NetFramework 4.5, Visual Studio 2013 //----------------------- for(int i=0;i<10;i++){} int i; //----------------------- 編譯錯誤訊息:無法在此範圍宣告名為 'i'的變數,因為其可能賦予 'i'不同的意義 為什麼呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.26.239.34 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1431873425.A.84E.html
yuhaw0715: 因為i被宣告兩次,而且這樣會造成無限迴圈的說... 05/17 22:45
mingpepe: for後面有大括號 05/17 22:47
wenyonba: 因為並不是你 int i; 在 for 後面,就代表外面的 i 僅限 05/17 22:47
wenyonba: 於 for 之後~~ 05/17 22:48
mingpepe: 怎麼我不太理解樓上的說法? 05/17 22:50
GoalBased: 為什麼你會覺得可以? 05/17 23:10
mingpepe: 變數i在離開for迴圈後就會消失,為什麼會無法在宣告一個 05/17 23:26
mingpepe: 變數i? 至少這在C++是可以的 05/17 23:26
GoalBased: 可是你寫的是C#阿..可以參考C# 語言規格第三章 05/17 23:36
GoalBased: 至於說為什麼喔,應該只是比較嚴謹吧 05/17 23:38
mingpepe: 是的 我當然了解這是C#不是C++ 我好奇的是理由 05/17 23:42
mingpepe: 不同的語言有不同的語法 也會帶來不同的好處與壞處 05/17 23:42
GoalBased: 哦..規定阿 05/17 23:43
mingpepe: 既然在for迴圈外無法存取變數i 有什麼樣的理由會限制 05/17 23:43
mingpepe: 不能再次宣告同名的變數 05/17 23:44
GoalBased: harp/13369.html 參考一下別人的回答 05/17 23:46
GoalBased: PTT不讓我貼縮網址了= = 自己複製一下吧 05/17 23:46
GoalBased: 他那一段也是語言規格裡面截出來的 05/17 23:49
GoalBased: 我最近剛好也在看這個東西,如果你對這種東西有興趣的 05/17 23:49
GoalBased: Program Files (x86)\Microsoft Visual Studio 12.0\VC 05/17 23:49
GoalBased: VC#\Specifications 底下有語言規格的word黨可以看 05/17 23:50
GoalBased: 如果要再深入一點我也沒辦法回答了 05/17 23:57
GoalBased: 可以考慮上MSDN問看看 05/17 23:57
C#5.0 Spec 7.6.2.1 有提到 例如 class Test { double x; void F(bool b) { x = 1.0; if(b) { int x; x = 1; } } } 會產生編譯時期錯誤 而 clss Test { double x; void F(bool b) { if(b) { x = 1.0; } else { int x; x = 1; } } } 就不會產生錯誤 Spec上的說明看不是很懂 ※ 編輯: mingpepe (114.26.239.34), 05/18/2015 00:10:57
GoalBased: spec有說,會錯是因為第一個有 x = 1.0; 05/18 09:17
GoalBased: 他有寫解釋啦,不過我也不知道"到底"是為什麼 05/18 09:17
TobyH4cker: 我才跟IL的特性有關 05/18 11:13
TobyH4cker: 猜 05/18 11:13
TobyH4cker: 我回家試試看 05/18 11:15
TobyH4cker: 原來下篇有人提到了 05/18 11:17