C# - 帮助创建行的实体

时间:2011-08-17 18:03:45

标签: c# data-structures

鉴于课程:

   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的行。

2 个答案:

答案 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
{
  ...
}