列表不会显示它的内容
List won't display it's content
我想制作一个应用程序来显示当前营业的商店。每个商店都有名称、工作时间和类别。我制作了一个包含每个商店及其属性的列表,但是当我使用 foreach 方法时,它不会显示它们中的任何一个......你碰巧知道问题出在哪里吗?或其他解决方法?
class Shop
{
public string name;
public DayOfWeek day{ get; set; }
public TimeSpan start{ get; set; }
public TimeSpan end{ get; set; }
public string address{ get; set; }
public string category{ get; set; }
public Shop(string name, DayOfWeek day, TimeSpan start, TimeSpan end, string address, string category)
{
name = this.name;
day = this.day;
start = this.start;
end = this.end;
address = this.address;
category = this.category;
}
}
public openshops()
{
List<Shop> openShop = new List<Shop>();
openShop.Add(new Shop("ill forno", DayOfWeek.Tuesday, new TimeSpan(18, 0, 0), new TimeSpan(00, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("Η ΣΥΡΑ", DayOfWeek.Sunday, new TimeSpan(12, 0, 0), new TimeSpan(00, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("ΠΙΤΑΚΙ", DayOfWeek.Tuesday, new TimeSpan(19, 30, 0), new TimeSpan(00, 30, 0), "ermoupoli", "souvlaki"));
this.InitializeComponent();
DayOfWeek today = DateTime.Today.DayOfWeek;
TimeSpan now = DateTime.Now.TimeOfDay;
if (today == DayOfWeek.Friday)
{
foreach (Shop shop in openShop)
{
if ((now > shop.start) && (now < shop.end))
{
Button btn = new Button();
btn.Content = shop.name;
myStackPanel.Children.Add(btn);
}
}
}
}
您正在反转构造函数中的设置逻辑:
您应该这样设置成员:
public Shop(string name, DayOfWeek day, TimeSpan start, TimeSpan end, string address, string category)
{
this.name = name;
this.day = day;
this.start = start;
this.end = end;
this.address = address;
this.category = category;
}
public Shop(string name, DayOfWeek day, TimeSpan start, TimeSpan end, string address, string category)
{
name = this.name;
day = this.day;
start = this.start;
end = this.end;
address = this.address;
category = this.category;
}
}
您正在将参数值设置为来自 class...
的未实例化变量
关键词
this
用于引用当前对象实例。
此外,按照惯例,属性 名称应该是 Pascal 大小写,因此如果您将代码重新格式化为:
class Shop
{
//public string name; //This one should have getters and setters too, fields shouldn't be exposed.
public string Name { get; set; }
public DayOfWeek Day{ get; set; }
public TimeSpan Start{ get; set; }
public TimeSpan End{ get; set; }
public string Address{ get; set; }
public string Category{ get; set; }
public Shop(string name, DayOfWeek day, TimeSpan start, TimeSpan end, string address, string category)
{
this.Name = name;
this.Day = day;
this.Start = start;
this.End = end;
this.Address = address;
this.Category = category;
}
}
一切都应该没问题。
约定参考:
https://msdn.microsoft.com/en-us/library/vstudio/ms229043%28v=vs.100%29.aspx
关于暴露class字段的参考:
http://thatextramile.be/blog/2009/10/slutty-types/
除了修复您设置属性的方式之外,您还遇到了开始时间和结束时间的问题。
openShop.Add(new Shop("ill forno", DayOfWeek.Tuesday, new TimeSpan(18, 0, 0), new TimeSpan(00, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("Η ΣΥΡΑ", DayOfWeek.Sunday, new TimeSpan(12, 0, 0), new TimeSpan(00, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("ΠΙΤΑΚΙ", DayOfWeek.Tuesday, new TimeSpan(19, 30, 0), new TimeSpan(00, 30, 0), "ermoupoli", "souvlaki"));
这些 Shop
对象的开始时间将大于结束时间,因此此 if
语句
if ((now > shop.start) && (now < shop.end))
对于这些 Shop
对象将始终为 false。我猜你真的想交换这些值。
openShop.Add(new Shop("ill forno", DayOfWeek.Tuesday, new TimeSpan(00, 0, 0), new TimeSpan(18, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("Η ΣΥΡΑ", DayOfWeek.Sunday, new TimeSpan(00, 0, 0), new TimeSpan(12, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("ΠΙΤΑΚΙ", DayOfWeek.Tuesday, new TimeSpan(00, 30, 0), new TimeSpan(19, 30, 0), "ermoupoli", "souvlaki"));
我想制作一个应用程序来显示当前营业的商店。每个商店都有名称、工作时间和类别。我制作了一个包含每个商店及其属性的列表,但是当我使用 foreach 方法时,它不会显示它们中的任何一个......你碰巧知道问题出在哪里吗?或其他解决方法?
class Shop
{
public string name;
public DayOfWeek day{ get; set; }
public TimeSpan start{ get; set; }
public TimeSpan end{ get; set; }
public string address{ get; set; }
public string category{ get; set; }
public Shop(string name, DayOfWeek day, TimeSpan start, TimeSpan end, string address, string category)
{
name = this.name;
day = this.day;
start = this.start;
end = this.end;
address = this.address;
category = this.category;
}
}
public openshops()
{
List<Shop> openShop = new List<Shop>();
openShop.Add(new Shop("ill forno", DayOfWeek.Tuesday, new TimeSpan(18, 0, 0), new TimeSpan(00, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("Η ΣΥΡΑ", DayOfWeek.Sunday, new TimeSpan(12, 0, 0), new TimeSpan(00, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("ΠΙΤΑΚΙ", DayOfWeek.Tuesday, new TimeSpan(19, 30, 0), new TimeSpan(00, 30, 0), "ermoupoli", "souvlaki"));
this.InitializeComponent();
DayOfWeek today = DateTime.Today.DayOfWeek;
TimeSpan now = DateTime.Now.TimeOfDay;
if (today == DayOfWeek.Friday)
{
foreach (Shop shop in openShop)
{
if ((now > shop.start) && (now < shop.end))
{
Button btn = new Button();
btn.Content = shop.name;
myStackPanel.Children.Add(btn);
}
}
}
}
您正在反转构造函数中的设置逻辑:
您应该这样设置成员:
public Shop(string name, DayOfWeek day, TimeSpan start, TimeSpan end, string address, string category)
{
this.name = name;
this.day = day;
this.start = start;
this.end = end;
this.address = address;
this.category = category;
}
public Shop(string name, DayOfWeek day, TimeSpan start, TimeSpan end, string address, string category)
{
name = this.name;
day = this.day;
start = this.start;
end = this.end;
address = this.address;
category = this.category;
}
}
您正在将参数值设置为来自 class...
的未实例化变量关键词
this
用于引用当前对象实例。
此外,按照惯例,属性 名称应该是 Pascal 大小写,因此如果您将代码重新格式化为:
class Shop
{
//public string name; //This one should have getters and setters too, fields shouldn't be exposed.
public string Name { get; set; }
public DayOfWeek Day{ get; set; }
public TimeSpan Start{ get; set; }
public TimeSpan End{ get; set; }
public string Address{ get; set; }
public string Category{ get; set; }
public Shop(string name, DayOfWeek day, TimeSpan start, TimeSpan end, string address, string category)
{
this.Name = name;
this.Day = day;
this.Start = start;
this.End = end;
this.Address = address;
this.Category = category;
}
}
一切都应该没问题。
约定参考: https://msdn.microsoft.com/en-us/library/vstudio/ms229043%28v=vs.100%29.aspx
关于暴露class字段的参考: http://thatextramile.be/blog/2009/10/slutty-types/
除了修复您设置属性的方式之外,您还遇到了开始时间和结束时间的问题。
openShop.Add(new Shop("ill forno", DayOfWeek.Tuesday, new TimeSpan(18, 0, 0), new TimeSpan(00, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("Η ΣΥΡΑ", DayOfWeek.Sunday, new TimeSpan(12, 0, 0), new TimeSpan(00, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("ΠΙΤΑΚΙ", DayOfWeek.Tuesday, new TimeSpan(19, 30, 0), new TimeSpan(00, 30, 0), "ermoupoli", "souvlaki"));
这些 Shop
对象的开始时间将大于结束时间,因此此 if
语句
if ((now > shop.start) && (now < shop.end))
对于这些 Shop
对象将始终为 false。我猜你真的想交换这些值。
openShop.Add(new Shop("ill forno", DayOfWeek.Tuesday, new TimeSpan(00, 0, 0), new TimeSpan(18, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("Η ΣΥΡΑ", DayOfWeek.Sunday, new TimeSpan(00, 0, 0), new TimeSpan(12, 0, 0), "ermoupoli", "pizza"));
openShop.Add(new Shop("ΠΙΤΑΚΙ", DayOfWeek.Tuesday, new TimeSpan(00, 30, 0), new TimeSpan(19, 30, 0), "ermoupoli", "souvlaki"));