如何取foreach里面的第一个元素?

dxbamboo 2010-04-23 03:13:38
public class Combinations<T> : IEnumerable<T[]> {。。。}
。。。

Combinations<int> combos = new Combinations<int>(elements, i);
foreach (int[] combo in combos) {。。。。。}

我只想取combos中的第一个元素,请问有方便的办法么?(不用foreach遍历)

...全文
4239 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinmeng08 2010-04-23
  • 打赏
  • 举报
回复
回复的人好多
claymore1114 2010-04-23
  • 打赏
  • 举报
回复 1
[Quote=引用 1 楼 cstod 的回复:]
in dot net framework 3.5

using System.Linq;



combos.First()
combos.FirstOrDefault()
[/Quote]

liujia_sk 2010-04-23
  • 打赏
  • 举报
回复
学习。。。既然要去第一个元素,为什么要foreach 呢,我觉得一楼的有道理
hhc123 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuyileneal 的回复:]
combos[0]不行么?
[/Quote]
用for才可以combos[0]
guyehanxinlei 2010-04-23
  • 打赏
  • 举报
回复 1
[Quote=引用 1 楼 cstod 的回复:]
in dot net framework 3.5

using System.Linq;



combos.First()
combos.FirstOrDefault()
[/Quote]

直接
coolcoffee4051982 2010-04-23
  • 打赏
  • 举报
回复
学习。。。。。。。。。。。
lunasea0_0 2010-04-23
  • 打赏
  • 举报
回复
combos.GetEnumerator().MoveNext().Current
zhehan54 2010-04-23
  • 打赏
  • 举报
回复
学习一下
dlsgliss 2010-04-23
  • 打赏
  • 举报
回复
学习,帮顶!
lihuinihao6315 2010-04-23
  • 打赏
  • 举报
回复
linq 很简洁,很强悍。
Xiruolanlan 2010-04-23
  • 打赏
  • 举报
回复

string temp = name.Text; // 从TextBox中读出数据
foreach (LCourse cou in Data.myCourse) // 在List<LCourse>中遍历
{
if (cou.name == temp) // 判断cou的名字匹配
{
Data.myCourse.Remove(cou); // 匹配的即为要删除的,从列表中去除
break; // 跳出循环
}
}

很容易就想到这么用foreach,貌似也没错误。但是印象中关于foreach的注意点就是只适用于遍历读取,不能修改。上边的代码却删除成功。这样,矛盾的种子就种在了心里,到底foreach是个什么东西?

过程:

看了MSDN文档,可是文档里的示例用到foreach时都是遍历读取每个元素,所以帮助不大。相关测试,异常,编译错误反倒有很大用处。

过程细节和总结:

1 ,自定义整型数组然后遍历修改

foreach(int myint in myArray)

{ myint+=8;}

错误 1 “myint”是一个“foreach 迭代变量”,无法为它赋值 G:\TEST\VS..C#\testforeach\Program.cs 15 27 testforeach
2 ,自定义类,在类中定义函数对私有成员进行操作,然后遍历类对象并调用函数

public class MyClass // 自定义的测试类
{
private int i = 0;
public void change()
{
i = 98;
}
public override string ToString()
{
return i.ToString();
}
}

MyClass[] myTest = new MyClass[10]; // 测试代码片段
foreach (MyClass mc in myTest)
{
mc.change();
Console.WriteLine(mc.ToString());
}

通过了编译,但是抛出异常,NullRefferenceException,未将对象引用设置到对象的实例。

3 ,就是像开头测试的例子,稍有改动,移除后不用break跳出

List<string> myString = new List<string>();

myString.Add("ab");
myString.Add("cd");
foreach (string s in myString)
{
myString.Remove(s);
}

编译通过了,但运行时抛出异常,InvalidOperationException,集合已修改;可能无法执行枚举操作。

通过上面三个测试例子和开头的实际例子,我貌似看到了foreach的某种东西。

第一,不能修改的是foreach引用变量,因为它是引用的,对它的修改没有意义也没有作用,它就像一个c/c++指针那样对集合中的元素进行指向引用;我们能通过引用看到它,但是没有能力动它。

第二,in之前的变量是引用变量,但in之后的集合确是实实在在的,所以可以对它操作,像.ADD();REMOVE()等方法可以使用。

第三,foreach引用变量大概是通过地址指向后面的集合(我猜想跟c/c++的指针很像),当修改了集合的元素时,地址可能发生某种改变,所以不跳出循环继续遍历时,就可能出现引用找不到的情况。

最后,也许说的不精准,但这就是我理解的全部了。首先表扬下自己这样的思路和精神,至于技术深度,大概没什么。呵呵,再接再厉。
nbhx2010 2010-04-23
  • 打赏
  • 举报
回复
晕,这个容易吧
不遍历也行
反正你都是第一个
tiandi0074 2010-04-23
  • 打赏
  • 举报
回复
学习,路过
别递烟哥不会 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cstod 的回复:]

in dot net framework 3.5

using System.Linq;



combos.First()
combos.FirstOrDefault()
[/Quote]
good
vrhero 2010-04-23
  • 打赏
  • 举报
回复
不用Linq的...你不知道return和break都可以跳出循环吗...
foreach (var combo in combos)
{
return combo;
}

or
foreach (var combo in combos)
{
x=combo;
break;
}
INGDI 2010-04-23
  • 打赏
  • 举报
回复
1楼好快!
cjcgy 2010-04-23
  • 打赏
  • 举报
回复
GetEnumrator
然后调用Current和MoveNext.
s_111111 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuyileneal 的回复:]
combos[0]不行么?
[/Quote]
覺得可以
believeken 2010-04-23
  • 打赏
  • 举报
回复
1楼!1楼!
十八道胡同 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cstod 的回复:]
in dot net framework 3.5

using System.Linq;



combos.First()
combos.FirstOrDefault()
[/Quote]
好主意!!
加载更多回复(2)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧