Linq不明白哪里出来问题,请大家帮助分析一下.

thinkc 2008-03-27 01:37:21


private void simpleButton1_Click(object sender, EventArgs e)
{
List<TESTCLASS> list = new List<TESTCLASS>();
int[] ary = new int[] { 1,1,1,1,2,2,2,3,3,3,4,4,4};

for (int i = 0; i < 100; i++)
{
list.Add(new TESTCLASS(i, i));
}

var list2 = from t in list
select new TESTCLASS(t.X, t.Y);

var list3 = from t in list2
join a in ary
on t.X equals a
select new { T = t, Order = a };

//var list1 = list3.Select(p => p.T).Distinct();
var list1 = list3.Select(p => p.T);
foreach (var t in list1)
{
MessageBox.Show(list1.ToList().IndexOf(t).ToString() + list.IndexOf(t).ToString());
}
}

public class TESTCLASS
{
public TESTCLASS(int x, int y)
{
this.x = x;
this.y = y;
}

int x;
public int X
{
get
{
return x;
}
set
{
x = value;
}
}

int y;
public int Y
{
get
{
return y;
}
set
{
y = value;
}
}
}

为什么弹出的结果会是-1呀!
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
thinkc 2008-03-27
  • 打赏
  • 举报
回复
关键代码如果改成如下方式就可以了,先将将结果保存到一个集合中就可以了


var list2 = from t in list
select new TESTCLASS(t.X, t.Y);
var list3 = list2.ToList();
foreach (var t in list3)
{
while (true)
{
MessageBox.Show(t.GetHashCode().ToString() + ":" + list3.ToList()[0].GetHashCode().ToString());
MessageBox.Show(list3.ToList().IndexOf(t).ToString());
return; ;
}
}

那位大侠能就这个问题进行一下解释说明?
thinkc 2008-03-27
  • 打赏
  • 举报
回复
完整代码


private void simpleButton1_Click(object sender, EventArgs e)
{
List<TESTCLASS> list = new List<TESTCLASS>();
int[] ary = new int[] { 1,1,1,1,2,2,2,3,3,3,4,4,4};

for (int i = 0; i < 100; i++)
{
list.Add(new TESTCLASS(i, i));
}

var list2 = from t in list
select new TESTCLASS(t.X, t.Y);

foreach (var t in list2)
{
while (true)
{
MessageBox.Show(t.GetHashCode().ToString() + ":" + list2.ToList()[0].GetHashCode().ToString());
MessageBox.Show(list2.ToList().IndexOf(t).ToString());
return; ;
}
}

}

public class TESTCLASS
{
public TESTCLASS(int x, int y)
{
this.x = x;
this.y = y;
}

int x;
public int X
{
get
{
return x;
}
set
{
x = value;
}
}

int y;
public int Y
{
get
{
return y;
}
set
{
y = value;
}
}
}

GetHashCode的值都不一样,真是见鬼了
thinkc 2008-03-27
  • 打赏
  • 举报
回复
代码有点问题,重新贴一下

for (int i = 0; i < 100; i++)
{
list.Add(new TESTCLASS(i, i));
}

var list2 = from t in list
select new TESTCLASS(t.X, t.Y);

foreach (var t in list2)
{
MessageBox.Show(list2.ToList().IndexOf(t).ToString());
}

弹出对话框的值就是-1了,真的看不懂了,按理说不应该呀,我是从list2集合中判读list2中的对象呀
  • 打赏
  • 举报
回复
跟踪每个查询结果 => 跟踪每个查询语句
  • 打赏
  • 举报
回复
linq确实相比过去写上一大片不太好调试。你应该断点跟踪每个查询结果(使用vs的watch窗口)。

Macosx 2008-03-27
  • 打赏
  • 举报
回复
默认比较是比对象的地址 而不是比内容
thinkc 2008-03-27
  • 打赏
  • 举报
回复
呵呵,这个我知道
我就想知道这里面究竟发生了什么?怎么会出现这种状况?
Macosx 2008-03-27
  • 打赏
  • 举报
回复
加上这个
public class TESTCLASS : IEquatable<TESTCLASS>

public bool Equals(TESTCLASS other) {
return this.X == other.X && this.Y == other.Y;
}

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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