迭代失败已排序的数组

时间:2012-08-24 19:09:37

标签: c# .net arrays loops

我有以下方法对绑定源索引列表进行排序,并将其对应的对象放入数组中。我也试过使用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++;
    }
}

2 个答案:

答案 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++;
    }
}