[問題] 變數範圍

看板C_Sharp作者時間9年前 (2015/05/17 22:37), 9年前編輯推噓1(1029)
留言30則, 5人參與, 最新討論串1/2 (看更多)
用的是 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

05/17 22:45, , 1F
因為i被宣告兩次,而且這樣會造成無限迴圈的說...
05/17 22:45, 1F

05/17 22:47, , 2F
for後面有大括號
05/17 22:47, 2F

05/17 22:47, , 3F
因為並不是你 int i; 在 for 後面,就代表外面的 i 僅限
05/17 22:47, 3F

05/17 22:48, , 4F
於 for 之後~~
05/17 22:48, 4F

05/17 22:50, , 5F
怎麼我不太理解樓上的說法?
05/17 22:50, 5F

05/17 23:10, , 6F
為什麼你會覺得可以?
05/17 23:10, 6F

05/17 23:26, , 7F
變數i在離開for迴圈後就會消失,為什麼會無法在宣告一個
05/17 23:26, 7F

05/17 23:26, , 8F
變數i? 至少這在C++是可以的
05/17 23:26, 8F

05/17 23:36, , 9F
可是你寫的是C#阿..可以參考C# 語言規格第三章
05/17 23:36, 9F

05/17 23:38, , 10F
至於說為什麼喔,應該只是比較嚴謹吧
05/17 23:38, 10F

05/17 23:42, , 11F
是的 我當然了解這是C#不是C++ 我好奇的是理由
05/17 23:42, 11F

05/17 23:42, , 12F
不同的語言有不同的語法 也會帶來不同的好處與壞處
05/17 23:42, 12F

05/17 23:43, , 13F
哦..規定阿
05/17 23:43, 13F

05/17 23:43, , 14F
既然在for迴圈外無法存取變數i 有什麼樣的理由會限制
05/17 23:43, 14F

05/17 23:44, , 15F
不能再次宣告同名的變數
05/17 23:44, 15F

05/17 23:46, , 17F
harp/13369.html 參考一下別人的回答
05/17 23:46, 17F

05/17 23:46, , 18F
PTT不讓我貼縮網址了= = 自己複製一下吧
05/17 23:46, 18F

05/17 23:49, , 19F
他那一段也是語言規格裡面截出來的
05/17 23:49, 19F

05/17 23:49, , 20F
我最近剛好也在看這個東西,如果你對這種東西有興趣的
05/17 23:49, 20F

05/17 23:49, , 21F
Program Files (x86)\Microsoft Visual Studio 12.0\VC
05/17 23:49, 21F

05/17 23:50, , 22F
VC#\Specifications 底下有語言規格的word黨可以看
05/17 23:50, 22F

05/17 23:57, , 23F
如果要再深入一點我也沒辦法回答了
05/17 23:57, 23F

05/17 23:57, , 24F
可以考慮上MSDN問看看
05/17 23:57, 24F
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

05/18 09:17, , 25F
spec有說,會錯是因為第一個有 x = 1.0;
05/18 09:17, 25F

05/18 09:17, , 26F
他有寫解釋啦,不過我也不知道"到底"是為什麼
05/18 09:17, 26F

05/18 11:13, , 27F
我才跟IL的特性有關
05/18 11:13, 27F

05/18 11:13, , 28F
05/18 11:13, 28F

05/18 11:15, , 29F
我回家試試看
05/18 11:15, 29F

05/18 11:17, , 30F
原來下篇有人提到了
05/18 11:17, 30F
文章代碼(AID): #1LMAUHXE (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1LMAUHXE (C_Sharp)