我还有一个与我班级有关的问题:
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#,但这远远超出了我。任何人都可以帮助解决一些想法。我希望我的问题有道理。
我会留意评论,所以如果有不明确的内容,请发表评论。
谢谢。
答案 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积。添加一些注释到构造函数或析构函数方法,有时难以阅读。