→ 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