我对我在应用程序中存储数据的方式有疑问,请记住我对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个公共投注,我只是想知道存储数据的更好方法是什么!
答案 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();
}
}
通过对这样的数据进行建模,每个对象都封装了自己的属性和属性数据,使其比大型通用类更有条理。