鉴于课程:
class SomeClass
{
public int intdata {get;set;}
public string stringdata {get;set;}
public double doubledata {get;set;}
public string[] ToStringArray()
{
string one = intdata.ToString();
string two = stringdata;
string three = String.Format("{0:C}", doubledata);
return new string[] {one,two,three};
}
}
假设我们有5个SomeClass
个实例。我想采用这些实例并将它们组织成行。
class RowHelper
{
public void List<string[]> Rows;
public RowHelper()
{
Rows = new List<string[]>();
}
public void CreateRows(SomeClass[] SomeClasses)
{
foreach(SomeClass rowData in SomeClasses)
{
Rows.Add(rowData.ToStringArray());
}
}
}
但是,现在我无法从下一个分隔一组行数据。我可以添加RowHelper成员public int RowSize
。然后,消费者需要使用RowSize
来解析行。这是最好的解决方法吗?
为了它的价值,我正在创建一个帮助类,将对象转换为可以插入到我的MVC项目的View层中的table tr
的行。
答案 0 :(得分:0)
如果要“将一组行数据与下一行分开”,只需在RowHelper和Rows之间添加一个中间RowSet类。
class RowSet
{
public void List<string[]> Rows = new List<string[]>();
}
class RowHelper
{
public List<RowSet> RowSets;
public RowHelper()
{
RowSets = new List<RowSet>();
}
public void CreateRows(SomeClass[] SomeClasses)
{
RowSet set = new RowSet();
foreach(SomeClass rowData in SomeClasses)
{
set.Rows.Add(rowData.ToStringArray());
}
RowSets.Add(set);
}
}
因此,RowHelper有一个公共属性,它是RowSet
个实例的集合。
RowSet
包含您的Rows
。
您的CreateRows
方法可以创建RowSet
的新实例,用行填充它并将其添加到RowSets
属性。
您现在可以迭代RowHelper.RowSets
并从那里迭代RowSet.Rows
。
考虑如何区分RowSet
并相应地选择集合类。例如,如果您只是串行访问它们,List<RowSet>
就可以了,但如果您想使用命名索引,请考虑使用Dictionary<string,RowSet>
。
答案 1 :(得分:0)
也许您可以在SomeClass
中实施IComparable。
有很多关于如何实现该接口的示例。 David Hayden有一个关于它的博客。
class SomeClass : IComparable
{
...
}