举例
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)
{
……
}欢迎讨论,呵呵,似乎是入门级别的问题。
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)
{
……
}欢迎讨论,呵呵,似乎是入门级别的问题。
int l=str.Length;
for(int i=0;i <l;i++)
{
……
}
这样写是对的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()};
}
{
……
} 这是每次都要取Length,但是这个值应该不是临时计算的,它在类里面应该有个变量存放,所以不会有多少时间消耗
foreach(string str in GetStrings())
{
……
} 这个只取一次
string str= "AAAAAAAAA ";
int l=str.Length;
for(int i=0;i <l;i++)
{
……
}
在《改善C#程序的50个习惯》中推荐使用foreach,而且里面有详细介绍,LZ可以找来看看
第二个不详
string str= "AAAAAAAAA ";
for(int i=0;i <str.Length;i++)
{
……
}
或者我错了 ?
=================================
我也看了 不错
但是个人水平太低 很多都不太理解
when loop the object,meanwhile want to change sth in the object,donot use "foreach"
"foreach" mean readonly.
因为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++)
{
……
}
则没有上述的比较