c#用foreach遍历数组、列表时是直接获得数据元素,而foreach哈希表时,为啥获得的是命名空间名??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#用foreach遍历数组、列表时是直接获得数据元素,而foreach哈希表时,为啥获得的是命名空间名??相关的知识,希望对你有一定的参考价值。
Hashtable ht = new Hashtable();//创建哈希表ht
ht.Add(1, "a"); //往ht里添加键值对
int[]num=4,5,6;
foreach (var n in ht) //遍历哈希表ht,结果如下图
Console.WriteLine(n);
foreach (var n in num) //遍历数组num
Console.WriteLine(n);
为什么foreach (var n in num) 可以直接让n获得数组num的元素?
而foreach (var n in ht)却没能让n获得哈希表ht的元素呢?
因为NUM是一位数组,遍历的时候可以直接取到对应的值
Hashtable 是键值对,遍历的的时候娶到的是其中某一对键值
Hashtable ht = new Hashtable();foreach (DictionaryEntry dic in ht)
Console.WriteLine(dic.Key + "--" + dic.Value);
追问
DictionaryEntry是返回此类型的实例,那它可以遍历返回某个类的对象实例吗,我刚才试写了个类Student,然后在主函数里写 Student类数组。但遍历错误
Student[] stu = s1,s2; //Student类型的数组
foreach (DictionaryEntry n in stu) //这里报错
foreach遍历函数,in 后边的对象的集合,那么in前边就应该是对应的对象,有对象要调用就应该实例化一个,因此这里面就是这样写的 foreach(对象 实例名 in 对象集合)
参考技术A Hashtable遍历的时候,是一个对象,foreach (DictionaryEntry n in ht) //遍历哈希表ht,结果如下图
n.Key
n.Value
追问
我搜索看到DictionaryEntry是返回返回此类型的实例,那它可以遍历返回某个类的对象实例吗,我刚才试写了个类Student,然后在主函数里写 Student类数组。遍历错误
Student[] stu = s1,s2; //Student类型的数组
foreach (DictionaryEntry n in stu) //这里报错
foreach (Student n in stu)
看你遍历对象是什么类型的,如果HashTable,就是DictionaryEntry
是Student[],就是Student ,其他对象就灵活处理
谢了。除了哈希表、list,还有没有类似常用的存储结构啊?有的话我去看看归纳一起。
本回答被提问者采纳 参考技术B foreach取的东西是正确的,但是哈希表里面的结果不是数字也不是字符而是一个键值对,你直接用Console.WriteLine(n);是打印不出来的。要想打印出结果必须把他转换成哈希表值的对象,然后找出其中的value。追问
foreach可以遍历 某个类的所有实例 吗,可以的话怎么写?
追答“Student[] stu = s1,s2; //Student类型的数组
foreach (DictionaryEntry n in stu) //这里报错
”
你完全没有理解foreach的使用方法,你的数组里面是什么类,这里就要写什么类。foreach (Student n in stu) 用自然语言来读就是“对stu里面的每一个student进行遍历”
之前那个DictionaryEntry是Dictionary(c#里用哈希表实现)里面一个键值对的对象,和你这个完全没有关系。
C#的foreach函数问题
哪位朋友能帮我详细的说明一下foreach函数。
目前只知道他是复制数组的工具。 其他就一无所知了。
还有,想问一下能不能用foreach实现反向复制。
也就是 数组里的数据 1,2,3 复制到另一个数组时变成3,2,1.
谢谢各位了。
它不关可以遍历数组还可以是集合等等
比如 你是int的数组
foreach(int [变量名] in 数组名)
[变量名](这个就是数组里具体的值了)
其实道理和 for循环是一样的 只是写法不一样
for(int i=0;i<10;i++)
数组名[i](也是数组里具体的值)
这里的数组名[i]和上面的[变量名] 是一样的 参考技术A 举个例子
num是一个int数组
foreach(int i in num)
...
foreach是一个类似for的循环具体到这句的意思是说 "循环遍历"num中所有元素
每次循环从num中提出一个元素作为i进入循环体内
一直循环,直到遍历结束num中所有的元素为止
foreach好像没有能反向读取数组吧
但是你说的123变321肯定是可以的,我给你个思路,你自己去想
数组A里面是1,2,3
数组B里面是空的
foreach数组A
把1存入数组B
存2的时候把数组B的0下标的值传给下标1的位置,然后再让2存入下标0的位置
以此类推,学习的价值在自己想,加油吧 参考技术B foreach 是迭代器 当一个类实现了IEnumerable 和 IEnumerator 这两个接口就可以实现迭代这类的对象;
至于数组的反向复制 可以用ArrayList 数组来实现,先调用ArrayList对象的反向排列方法Reverse()然后调用Copy()或ToArray()方法拷贝到一个数组 就行了 参考技术C 反向复制用foreach貌似还不如循环来的快啊
以上是关于c#用foreach遍历数组、列表时是直接获得数据元素,而foreach哈希表时,为啥获得的是命名空间名??的主要内容,如果未能解决你的问题,请参考以下文章