第一種寫法
SqlCommand sql...
News obj = new News();
DataTable dt = db.xxx(sql);
DataRow dr = dt.Rows[0];
obj = new News()
{
Title = dr["TITLE"].ToString()
};
SqlCommand sql...
dt = db.xxx(sql);
foreach (DataRow r in dt.Rows)
{
obj.Imgs.Add(new NewsImage()
{
Sn = r["SN"].ParseInt()
});
}
在來改成第二種寫法
SqlCommand sql...
News news = new News();
DataTable dt = db.xxx(sql);
DataRow dr = dt.Rows[0];
news.Title = dr["TITLE"].ToString();
SqlCommand sql...
dt = db.xxx(sql);
List<NewsImage> newsImage = new List<NewsImage>();
foreach (DataRow dataRow in dt.Rows)
{
newsImage.Add(new NewsImage()
{
Sn = dataRow["SN"].ParseInt()
});
}
news.Imgs = newsImage;
foreach (DataRow dataRow in dt.Rows)
{
**//newsImage.SN = dataRow["SN"].ParseInt();<=這裏無法改成這樣,newsImage.點下去並不會出現強型別SN,為何使用List<類別> 時就無法使用而是要用Add **
}
news.Imgs = newsImage;
public class NewsImage
{
public int Sn { get; set; }
}
public class News
{
public int Sn { get; set; }
public string Title { get; set; }
public List<NewsImage> Imgs { get; set; } = new List<NewsImage>();
}
List newsImage = new List();
這行其實我也沒看到類別? 可以這樣寫?
list 是多筆資料集合 要使用item的property 依樣要靠foreach或者指定某一筆
或者指定index取得
void Main()
{
var temp = Enumerable.Range(1,10).Select(x=> new {Name = $"{x}{x}",Age = x }).ToList();
foreach(var item in temp)
Console.WriteLine($"Name:{item.Name}、Age:{item.Age}");
//單筆
Console.WriteLine($"Name:{temp[0].Name}、Age:{temp[0].Age}");
}
Result
Name:11、Age:1
Name:22、Age:2
Name:33、Age:3
Name:44、Age:4
Name:55、Age:5
Name:66、Age:6
Name:77、Age:7
Name:88、Age:8
Name:99、Age:9
Name:1010、Age:10
Name:11、Age:1
newsImage你宣告的 => List<NewsImage> newsImage = new List<NewsImage>();
假設newsImage內容 { SN:1 , SN:4 , SN:7}
你想使用newsImage.SN => 我就問你,這種寫法我該取List中的哪一個SN,是1還是4還是7?
所以不可能有這種用法嘛~
呈你改的第二種寫法
看起來你的class New裡面有一個List<Image>
,那麼你也不用再重複宣告一個newsImage出來,直接如下:
foreach (DataRow dataRow in dt.Rows)
{
news.Imgs.Add( dataRow["SN"].ParseInt() ) ;
}
Add也沒什麼不好,因為你用的是DataTable,如果是兩個List就容易啦!
但這一行newsImage.SN其實是要塞值給他,並不是要取他的值
我在上面其實有一個是單筆不是list,他就可以news.Title
但在多筆時只能用add,所以覺得好怪
News news = new News();
DataTable dt = db.xxx(sql);
DataRow dr = dt.Rows[0];
news.Title = dr["TITLE"].ToString();
那您需要的是知道List是什麼東西。
以及如何對List取值賦值~
這個上網查查就有一堆~
如我所說,無論取值或塞值,您都不會知道.SN之後,是要
取哪一個值/ 塞進哪一個值,所以不會有這種用法。
因為缺少了index
我的範例
假設newsImage內容 { SN:1 , SN:4 , SN:7}
取第一個值 var a = newsImage[0].SN ;
//a = 1
賦值給第一個 newsImage[0].SN = 333 ;
//newsImage => { SN:333 , SN:4 , SN:7}
所以舉一反三,你的範例,newsImage也可以利用index去賦值喔!
其實我比較好奇的是這樣就行
newsImage.Add(new NewsImage()
{
Sn = dataRow["SN"].ParseInt()
});
但舉一反三
應該是 newsImage.Sn = dataRow["SN"].ParseInt();
這個在單筆list時是可以