-3

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

2 回答 2

0

你可以试试这个:

var bar = indices.OrderBy(x => x).Select(x => BindingSource[x]).ToArray();

但是我认为您的代码应该可以工作,尽管我认为您可以使用 for 循环而不是 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.

于 2012-08-24T19:15:19.120 回答
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++;
    }
}
于 2012-08-24T20:35:24.640 回答