foreach (string var in students.Keys)
{
Console.WriteLine(var);
}
var具体是什么参数,
如果仅是一个形参那么为什么会不允许修改
他到底是怎样从集合中取数据的
又是否copy了副本
foreach (object var in students.Keys)
{
Console.WriteLine(var);
}
{
Console.WriteLine(var);
}
var具体是什么参数,
如果仅是一个形参那么为什么会不允许修改
他到底是怎样从集合中取数据的
又是否copy了副本
foreach (object var in students.Keys)
{
Console.WriteLine(var);
}
解决方案 »
- 据说,声明委托时,会自动生成一个密封类,这个密封类的源码能看到吗?
- 抽象派生类只能继承一个基类。但可以用一个继承链包含多个抽象类-我不明白继承链
- 新手两个小问题,请大家指点!在线等.....
- 内存流的内容用HTTP协议发送的问题
- 急需钱 找兼职
- 加入的MainMenu为什么运行后看不到了
- 我写了一段代码提取图标,但是提出的图标有问题,请帮助
- C#中如何上传和展示OLE对象。
- datalist是如何分页的?
- 请问有没有人做过用C#多段视频录像(有重叠),无缝拼接成一个全景图像视频的demo呢(图像无缝拼接融合),求指导~有现成的demo能否提供学习下
- C# 怎么做才能调用一个共用的文件
- 五子棋的算法和哪个经典算法相似(我的面试题)
{
对每一个人进行操作
}明白吗? 这属于迭代
--------
不允许修改枚举项是foreach的特性,与var无关...var是推断类型...由编译器根据初始化语句右侧的表达式推断变量的类型...var关键字并不意味着“变体”,也不表示该变量是松散类型化变量或后期绑定变量。它只是表示由编译器确定和分配最适当的类型...
When should I use IEnumerator for looping in c#?
http://stackoverflow.com/questions/456433/when-should-i-use-ienumerator-for-looping-in-c
// 有个回答
According to the C# language spec: A foreach statement of the formforeach (V v in x) embedded-statement is then expanded to:{
E e = ((C)(x)).GetEnumerator();
try {
V v;
while (e.MoveNext()) {
v = (V)(T)e.Current;
embedded-statement
}
}
finally {
... // Dispose e
}
}The essense of your two examples are the same, but there are some important differences, most notably the try/finally.
public interface IEnumerable{ IEnumerator GetEnumerator();}
public interface IEnumerator
{ bool MoveNext(); void Reset();
Object Current { get; }}在方法中用yield return就可以实现这个直定义的迭带器.
(平常的用法)class 小方 {
static void Main(string[] args)
{
int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
foreach (int i in fibarray)
{
System.Console.WriteLine(i);
}
}
}
输出
0
1
2
3
5
8
13
假设有下面的foreach循环:
foreach(Person p in Persons)
{
Console.Write(p);
}
foreach语句会解析为下面的代码段。首先,调用GetEnumerator()方法,获得数组的一个枚举。然后再使用while循环:
IEnumerator enumerator = persons.GetEnumerator();
while(enumerator.MoveNext())
{
Person p = (Person)enumerator.Current;
Console.Write(p);
}
所以foreach (string var in students.Keys) 中var的数据类型必需和students.Keys的数据类型一致,因为我们看到上面解析的中间代码里是采用强制转换将枚举对像值转换为你定义的对像,如果你声明的对像不一致就会报错了。