基于c#中列表中Id元素的值迭代列表

时间:2011-06-20 14:44:59

标签: c#

我还有一个与我班级有关的问题:

public class Parent {
        public IList<ParentDetail> ParentDetails {
            get { return _ParentDetails; }
        }
        private List<ParentDetail> _ParentDetails = new List<ParentDetail>();
        public Parent() {
            this._ParentDetails = new List<ParentDetail>();
        }
    }

    public class ParentDetail {
        public int Id { get; set; }
    }

}

目前,我遍历ParentDetails并为每个ParentDetail执行一些操作。我正在使用MVC剃刀语法,所以这就是@(.. etc

的原因
@foreach (int index in Enumerable.Range(0, Model.Parent.ParentDetails.Count()))
{
  Model.Parent.ParentDetails[@index].Id

这给了我数字1,2,3 ...等,如果在列表中顺序分配了ID,第一个元素的Id为1,第二个元素的Id为2等。

但是我的列表中的ID没有按顺序分配。我可能会这样:

list-element [0] has an Id of 3
list-element [1] has an Id of 4
list-element [2] has an Id of 1
list-element [3] has an Id of 2

我需要的东西是相当于foreach的东西,它可以让我根据Id的值迭代我的列表。也许我需要使用Index方法来查找,但我不知道如何将这一切都放入循环中。

我知道一些C#,但这远远超出了我。任何人都可以帮助解决一些想法。我希望我的问题有道理。

我会留意评论,所以如果有不明确的内容,请发表评论。

谢谢。

3 个答案:

答案 0 :(得分:0)

LINQ是针对此类情况的超级简单解决方案:

foreach(var details in Model.Parent.ParentDetails.OrderBy(d => d.Id))
{
    // details are processed in increasing order of Id here
}

如果System.Linq命名空间尚未包含在视图中,则需要添加@using System.Linq命名空间。

<强>除了

你现有的代码以一种迂回的方式做事。这样:

@foreach (int index in Enumerable.Range(0, Model.Parent.ParentDetails.Count()))
{
    var x = Model.Parent.ParentDetails[@index].Id;
}

也可以写成

@foreach (var details in Model.Parent.ParentDetails)
{
    var x = details.Id;
}

这是迭代集合的自然方式,更为可取(除非你还需要集合中每个ParentDetails对象的索引)。

答案 1 :(得分:0)

使用linq如下:

foreach (var res in Model.Parent.ParentDetails.Select((x,n)=> string.Format("list-element [{1}] has an Id of {0}",x.Id,n)))
    {
        Console.Out.WriteLine("{0}", res);
    }

然后使用相应的out方法

答案 2 :(得分:0)

以前的答案提到LINQ,它还可以,因为你有Visual Studio 2088或更高版本:

http://msdn.microsoft.com/es-es/library/bb386976.aspx

如果没有,您可以尝试添加一些内部排序操作:

public class Parent {

  private List<ParentDetail> _ParentDetails = new List<ParentDetail>();
  public IList<ParentDetail> ParentDetails {
    get { return _ParentDetails; }
  }

  // constructor:
  public Parent() {
    this._ParentDetails = new List<ParentDetail>();
  } // constructor

  public IList<ParentDetail> customSort() {
    Result = new List<ParentDetail>();

    // use sort code here,
    // copying item references to result list
    ...   

    return Result;
  } 
} // class

有几种方法可以对列表或数组进行排序,在web:

http://www.csharp411.com/sort-c-array-in-descendingreverse-order/

Pd积。添加一些注释到构造函数或析构函数方法,有时难以阅读。