举例
string str="AAAAAAAAA";
for(int i=0;i<str.Length;i++)
{
……
}
这里每次循环都要计算str.Length的值吗?还是就第一次算一下?
我估计是每次都要算一次,那么如果这个str在循环体不变的话,这样写是不是更好?
string str="AAAAAAAAA";
int l=str.Length;
for(int i=0;i<l;i++)
{
……
}关于foreach的问题
有一个方法GetStrings()返回的是个字符串数组,在遍历的时候,会不会每次都要执行这个方法?
foreach(string str in GetStrings())
{
……
}
如果是的话,那么是不是应该这样写
string[] ss=GetStrings();
foreach(string str in ss)
{
……
}欢迎讨论,呵呵,似乎是入门级别的问题。

解决方案 »

  1.   

    string   str= "AAAAAAAAA "; 
    int   l=str.Length; 
    for(int   i=0;i <l;i++) 

    …… 

    这样写是对的foreach两种写法都可以~~~~~你可以跟踪调试就知道了
      

  2.   

    测试一下就知道了,for是每次取的,foreach只执行一次
     private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < getCount(); i++)
                {
                    Console.WriteLine(i);
                }
                foreach (string str in getString())
                {
                    Console.WriteLine(str);
                }
            }        public int getCount()
            {
                System.Threading.Thread.Sleep(1000);
                return 3;
            }
            public string[] getString()
            {
                System.Threading.Thread.Sleep(1000);
                return new string[] { Guid.NewGuid().ToString(),Guid.NewGuid().ToString()};
            }
      

  3.   

    for(int   i=0;i <str.Length;i++) 

    …… 
    } 这是每次都要取Length,但是这个值应该不是临时计算的,它在类里面应该有个变量存放,所以不会有多少时间消耗
    foreach(string   str   in   GetStrings()) 

    …… 
    } 这个只取一次
      

  4.   

    正如上面的兄弟所说foreach是次数最少的从效率上看下面这个是最差的,要计算的次数最多,因为每个for里面都还需要计算一次
    string   str= "AAAAAAAAA "; 
    int   l=str.Length; 
    for(int   i=0;i <l;i++) 

    …… 

    在《改善C#程序的50个习惯》中推荐使用foreach,而且里面有详细介绍,LZ可以找来看看
      

  5.   

    第一个肯定是int i=str.Length;之后速度快.
    第二个不详 
      

  6.   

    @hapen_zhang ,貌似是这个调最多吧,有str.Length + 1 次,
    string   str= "AAAAAAAAA "; 
    for(int   i=0;i <str.Length;i++) 

    …… 

    或者我错了 ?
      

  7.   

    在《改善C#程序的50个习惯》中推荐使用foreach,而且里面有详细介绍,LZ可以找来看看 
    =================================
    我也看了 不错
    但是个人水平太低  很多都不太理解
      

  8.   

    when u want to loop some object to do sth,but not change the object's content, suggest use "foreach"
    when loop the object,meanwhile want to change sth in the object,donot use "foreach"
    "foreach" mean readonly.
      

  9.   

    谢谢大家的看法,很有意义!CSDN现在结贴功能真是垃圾啊!
      

  10.   

    to:Space204 
    因为C#的异常检查机制
    string       str=   "AAAAAAAAA   ";   
    int       l=str.Length;   
    for(int       i=0;i   <l;i++)   
    {   
    ……   
    }  循环里面实际上还会比较一次l和str.length,如果超出则抛出异常
    所以比较次数是最多的,这个跟C++等不同

    string       str=   "AAAAAAAAA   ";   
    for(int       i=0;i   <str.Length;i++)   
    {   
    ……   
    }  
    则没有上述的比较