[英]Creating Custom Generic List in C#
你好朋友,我想創建自定義的通用列表,我的代碼如下:
public class Dates
{
string _FromDate;
string _ToDate;
public string FromDate
{
get { return _FromDate; }
set { _FromDate = value; }
}
public string ToDate
{
get { return _ToDate; }
set { _ToDate = value; }
}
}
protected void btnsearch_Click(object sender, EventArgs e)
{
DateTime start = new DateTime(2013,1,5);
DateTime end = new DateTime(2013,2,2);
string dayName = drpday.SelectedItem.ToString().ToLower();
Dates dt = new Dates();
List<Dates> list = new List<Dates>();
int i = 0;
for (DateTime runDate = start; runDate <= end; runDate = runDate.AddDays(1))
{
if (runDate.DayOfWeek.ToString().ToLower() == dayName)
{
dt.FromDate = runDate.ToShortDateString();
dt.ToDate = (runDate.AddDays(double.Parse(hd_tourdays.Value)).ToShortDateString());
list.Insert(i++,dt);
}
}
grd_TourDates.DataSource = list;
grd_TourDates.DataBind();
}
在我的結果列表中,它僅顯示循環中添加的最后一項,請幫助解決問題。
嘗試這個 : - -
protected void btnsearch_Click(object sender, EventArgs e)
{
DateTime start = new DateTime(2013,1,5);
DateTime end = new DateTime(2013,2,2);
string dayName = drpday.SelectedItem.ToString().ToLower();
Dates dt = new Dates();
List<Dates> list = new List<Dates>();
int i = 0;
for (DateTime runDate = start; runDate <= end; runDate = runDate.AddDays(1))
{
if (runDate.DayOfWeek.ToString().ToLower() == dayName)
{
list.Add(new Dates{
FromDate=runDate.ToShortDateString();
ToDate=(runDate.AddDays(double.Parse(hd_tourdays.Value)).ToShortDateString());
});
}
}
grd_TourDates.DataSource = list;
grd_TourDates.DataBind();
}
更改此:
protected void btnsearch_Click(object sender, EventArgs e)
{
Dates dt = new Dates();
List<Dates> list = new List<Dates>();
int i = 0;
for (DateTime runDate = start; runDate <= end; runDate = runDate.AddDays(1))
{
if (runDate.DayOfWeek.ToString().ToLower() == dayName)
{
dt.FromDate = runDate.ToShortDateString();
dt.ToDate = (runDate.AddDays(double.Parse(hd_tourdays.Value)).ToShortDateString());
list.Insert(i++,dt);
}
}
grd_TourDates.DataSource = list;
grd_TourDates.DataBind();
}
為此,並嘗試:
protected void btnsearch_Click(object sender, EventArgs e)
{
Dates dt;
List<Dates> list = new List<Dates>();
int i = 0;
for (DateTime runDate = start; runDate <= end; runDate = runDate.AddDays(1))
{
if (runDate.DayOfWeek.ToString().ToLower() == dayName)
{
dt = new Dates()
dt.FromDate = runDate.ToShortDateString();
dt.ToDate = (runDate.AddDays(double.Parse(hd_tourdays.Value)).ToShortDateString());
list.Insert(i++,dt);
}
}
grd_TourDates.DataSource = list;
grd_TourDates.DataBind();
}
引起問題的部分是這個
Dates dt = new Dates();
for (.....)
{
dt.FromDate = ...;
dt.ToDate = ...;
list.Insert(i++,dt);
}
您在代碼中使用的是名為Dates
的類,在C#中使用的是引用類型 e。 您正在代碼中創建一個實例,並在Dates dt = new Dates();
為其分配名為dt
的引用Dates dt = new Dates();
線。
在循環中,您可以更改實例的某些屬性,並將對該實例的引用添加到列表中。 然后,循環再次執行,並且您更改了實例的屬性,從而更改了列表中已有引用的實例值,然后將相同的引用再次添加到列表中。
循環像循環一樣繼續進行,這一次又一次地發生,您將剩下一個列表,其中包含一堆對完全相同的實例的引用。
因此, list
的值不僅看起來相同,而且是完全一樣的。 為了解決這個問題,每次需要使用以下代碼將實例添加到列表時,都需要創建Dates
類的新實例。
for (.....)
{
Dates dt = new Dates(); //creates a new reference to a new instance
dt.FromDate = ...; //sets properties on the instance
dt.ToDate = ...;
list.Insert(i++,dt); // inserts a reference to the instance in the list
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.