我有DrawObject[]
的列表。每个DrawObject都有Rectangle
属性。这是我的活动:
List<Canvas.DrawObject[]> matrix;
void Control_MouseMove ( object sender, MouseEventArgs e )
{
IEnumerable<Canvas.DrawObject> tile = Enumerable.Range( 0, matrix.Capacity - 1)
.Where(row => Enumerable.Range(0, matrix[row].Length -1)
.Where(column => this[column, row].Rectangle.Contains(e.Location)))
.????;
}
我不确定我的最终选择命令应该代替“????”。另外,我收到了一个错误:cannot convert IEnumerable<int> to bool
。
我已经阅读了几个关于在数组列表上执行linq查询的问题,但是我不能完全理解这个问题。有帮助吗?
修改
对我的实施意图不清楚表示歉意。
我打算选择当前包含鼠标位置的DrawObject
。
答案 0 :(得分:4)
一点也不清楚你要做什么。我怀疑你想要的东西如下:
var drawObjects = from array in matrix
from item in array
where item.Rectangle.Contains(e.Location)
select item;
......但也许不是。您尚未显示您要对查询结果执行的操作,或this[column, row]
的用途。
您几乎肯定不想首先使用列表的容量 - 您更有可能对Count
感兴趣,但使用列表因为IEnumerable<T>
可能更好。
编辑:好的,所以上面的查询找到 all 矩形包含给定位置的drawObjects
。您几乎肯定希望使用First
,FirstOrDefault
,Single
或SingleOrDefault
之类的内容。例如:
var drawObject = (from array in matrix
from item in array
where item.Rectangle.Contains(e.Location)
select item)
.SingleOrDefault();
if (drawObject != null) // We found one
{
...
}
答案 1 :(得分:1)
var tile = matrix.SelectMany(x => x)
.Where(x => x.Rectangle.Contains(e.Location));
答案 2 :(得分:0)
也许:
....Select(y => y);
但很难真正说出你在做什么。并且您的第一个Where
子句将不起作用,因为子句中的lambda表达式必须导致bool,但您的lambda表达式导致IEnumerable<T>
。如果我没错。