我有以下方法对绑定源索引列表进行排序,并将其对应的对象放入数组中。我也试过使用Array.Sort()
并且都不起作用,foreach循环中的代码永远不会被调用。我测试过变量int[] indices
既不是空也不是空。
internal void Foo(int[] indices)
{
var bar = new Object[indices.length];
int i = 0;
foreach (int index in indices.OrderBy(x => x))
{
// this block never gets called
bar[i] = BindingSource[index];
i++;
}
}
答案 0 :(得分:0)
你可以试试这个:
var bar = indices.OrderBy(x => x).Select(x => BindingSource[x]).ToArray();
但是我认为你的代码应该可行但我认为你可以使用for-loop而不是foreach来改进它。
internal void Foo(int[] indices)
{
var bar = new Object[indices.Length];
indices = indices.OrderBy(x => x);
for(int i = 0; i < indices.Length; i++)
bar[i] = BindingSource[indices[i]];
}
另一件事,你应该确保indices.Length
不等于0
所以我认为索引是空的。
PS: C#区分大小写,因此代码中的indices.length
应为indices.Length
。
答案 1 :(得分:0)
问题是OrderBy
没有返回已排序的数组,正如我所假设的那样。以下是我的解决方案。
internal void Foo(int[] indices)
{
var bar = new Object[indices.Length];
int i = 0;
indices = indices.OrderBy(x => x).ToArray();
foreach (int index in indices)
{
// now this block gets called
bar[i] = BindingSource[index];
i++;
}
}