iT邦幫忙

0

List<NewsImage> newsImage = new List<NewsImage>();只能用add嗎

  • 分享至 

  • xImage

第一種寫法

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>();
}
froce iT邦大師 1 級 ‧ 2021-12-22 15:13:49 檢舉
我不知道你有多混亂,我只知道你不用程式碼區塊,看的人更覺得亂。
真的很亂。學一下用程式區塊。要不然你亂我也亂。
Jason iT邦新手 4 級 ‧ 2021-12-22 15:41:15 檢舉
已經加入
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
天黑
iT邦研究生 5 級 ‧ 2021-12-22 15:44:41

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

0
緯大啊緯大人
iT邦研究生 1 級 ‧ 2021-12-23 08:38:31

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就容易啦!

Jason iT邦新手 4 級 ‧ 2021-12-23 09:18:50 檢舉

但這一行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去賦值喔!

Jason iT邦新手 4 級 ‧ 2021-12-24 09:37:03 檢舉

其實我比較好奇的是這樣就行

newsImage.Add(new NewsImage() 
{ 
    Sn = dataRow["SN"].ParseInt() 
});

但舉一反三
應該是 newsImage.Sn = dataRow["SN"].ParseInt();
這個在單筆list時是可以

我要發表回答

立即登入回答