2012-07-02 170 views
0

为什么这段代码不起作用?为什么循环想在c#中使用函数的参数?

private void Function(int starts , int ends) 
{ 
    int i = starts; 
    int z = ends; 

    for(i; i < z; i++) 
    { 
     [...] 
    } 
} 

这就是说:错误3只能使用赋值,调用,递增,递减和新的对象表达式作为语句。

如何使代码工作?

回答

7
What to do to make code work? 

如何

for (; i < z; i++) 
{ 
    [...] 
} 

为什么创建一个额外的变量'z'时,你可以做

for (int i = starts; i < ends; i++) 
{ 
    [...] 
} 

为什么您的代码不会不工作!

因为for循环语法

for (initializer; condition; increment or decrement) 
{ 

} 

你没有初始化的初始化i。你可以初始化它(作为我的第二个片段),或者如果你正在初始化它在一些早期的语句(作为我的第一个片段),删除初始化。

+1

或for(int i = starts; i LadislavM

+0

他的代码和你的第二个代码有什么区别?都将从我开始 – aliboy38

+0

@ aliboy38:两者都将从我开始,但我正在初始化它for循环 –

1

for循环的第一部分需要初始化语句。 i不是一个声明。如果您不想初始化任何东西,你可以离开的那部分空白,在Nikhil的答案:

for(; i < z; i++) 
{ 
    [...] 
} 
0

不要用外面定义的变量在for循环索引。

private void Function(int starts , int ends) 
{ 
    // int i = starts; // don't do it. you're exposing yourself to headaches if/when you lose control of the value of i 
    int z = ends; 

    for(int i = starts; i < z; i++) //first statement of for loops initializes the indexer 
    { 
     [...] 
    } 
} 
2

i本身并不是一个声明,它是一个表达式。就像你可以 - 不要简单地在你的代码的某个地方写i;一样。 for循环的初始化部分需要初始化;然而,如果(就像这里的情况)循环已经被初始化(已经设置了i),你可以像Nikhil所显示的那样忽略它。只需做for(;i<z;i++)

0

我认为这是更好的答案是不是?

private void Function(int starts , int ends) 
{ 
    for(int i = starts; i < ends; i++) 
    { 
     [...] 
    } 
} 
相关问题