在班级中组织数据

时间:2015-01-21 21:37:10

标签: c#

我对我在应用程序中存储数据的方式有疑问,请记住我对C#没有太多经验。所以,我正在从文件中获取数据,并能够使用foreach循环将其全部打印出来

try
{
    var doc = new HtmlDocument();
    doc.LoadHtml(htmlDoc);
    var i = 0;
    foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//tr"))
    {
        if (i <= 6) { Console.Write("[Type1]"); }
        if (i >= 7 && i <= 12) { Console.Write("[Type2 i + " : "); }
        if (i >= 13 && i <= 23) { Console.Write("[Type3] i + " : "); }
        if (i >= 24 && i <= 33) { Console.Write("[Type4]" + i + " : "); }
        if (i >= 34 && i <= 39) { Console.Write("[Type5]" + i + " : "); }
        if (i > 38 || i < 1) { Console.Write("Error LTZ or GTV"); }
        Console.Write(row.Elements("td").First().InnerText);
        Console.Write(" - ");
        Console.WriteLine(row.Elements("td").Last().InnerText);
        i++;
    }

}

这部分工作正常,它会在数据前面用适当的标签打印出来。我想要完成的是不打印数据,而是将其存储在我的班级中。我现在这样建模

public class House
{
    //Downstairs
    public int DBedrooms {get; set; }
    public int DKitchens {get; set; }
    public int DLiving { get; set; }
    //upstairs
    public int UBedrooms { get; set; }
    public int UKitchens { get; set; }
    public int ULiving { get; set; }
    //Neighborhood
    public string NSchool { get; set; }
    public int NSchoolDist { get; set; }
    public int NCrime { get; set; }
    ...
    ...
    ...
}

目前班上大约有40个公共投注,我只是想知道存储数据的更好方法是什么!

2 个答案:

答案 0 :(得分:2)

每个可以有重复项的结构都应该有自己的类,而不是仅仅声明很多属性,我个人喜欢将这些结构存储在列表中。你也想把它们按照正确的顺序添加到列表中,这样你就不会把楼上的错误误认为是楼下。

为了能够在一个房子里有很多楼层我会像这样组织:

public class Floor {
    public int DBedrooms {get; set; }
    public int DKitchens {get; set; }
    public int DLiving { get; set; } 
}

public class House {
    public List<Floor> Floors{get;set;}
    public string NSchool { get; set; }
    public int NSchoolDist { get; set; }
    public int NCrime { get; set; } 
}

仅供参考:如果您可以使用Repeater而不是可编程地创建html(http://www.w3schools.com/aspnet/aspnet_repeater.asp),虽然我不知道它是否适合您的用例。

编辑:如果您是创建源文件的人,那么请考虑从xml反序列化。

答案 1 :(得分:0)

首先,对象的用例是什么?如果它只是一个数据传输对象,那么保持原样应该没问题。但是,如果要在整个应用程序中使用对象的某些部分,那么您可以将其分解为如下部分:

public class Downstairs : Floor
{
    public IList<Room> Rooms { get; set;}
}

public class Upstairs : Floor
{
    public IList<Room> Rooms { get;set; }
}

public class House
{
    public HouseOwner Owner { get;set; }
    public readonly IList<Floor> Floors { get; private set;}

    public House(HouseOwner owner, IList<Floor> floors)
    {
        this.Owner = owner;
        this.Floors = floors;
    }

    public void AddFloor(Floor floor)
    {
        this.Floors.Add(floor);
    }

    public int TotalFloors()
    {
        return this.Floors.Count();
    }
}

通过对这样的数据进行建模,每个对象都封装了自己的属性和属性数据,使其比大型通用类更有条理。