最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用linq給List某個屬性值賦值方式

 更新時間:2026年06月05日 09:57:14   作者:hefeng_aspnet  
在C#中使用LINQ進(jìn)行數(shù)據(jù)查詢與修改的最佳實(shí)踐,推薦使用ForEach方法或傳統(tǒng)的foreach循環(huán)進(jìn)行List對象屬性賦值;避免直接在LINQ查詢表達(dá)式中執(zhí)行賦值操作;可考慮使用Select投影生成新列表以保持?jǐn)?shù)據(jù)不變性

在 C# 中,LINQ 的設(shè)計(jì)初衷是用于查詢數(shù)據(jù)而非修改數(shù)據(jù)(即“無副作用”)。因此,直接使用 LINQ 的 Select 或 Where 來賦值并不是最佳實(shí)踐,且容易引發(fā)混淆。

不過,根據(jù)具體場景,有以下幾種常見方式可以實(shí)現(xiàn)“給 List 中對象的某個屬性賦值”:

1. 使用ForEach方法(推薦,簡潔直觀)

這是最常用且易讀的方式。List<T> 提供了 ForEach 擴(kuò)展方法,可以直接遍歷并修改每個元素的屬性。

// 假設(shè)有一個 Person 類,包含 Name 和 Age 屬性
list.ForEach(p => p.Age = 30); // 將所有人員的年齡設(shè)置為 30
// 條件賦值:只修改滿足條件的元素
list.Where(p => p.Name == "Alice").ToList().ForEach(p => p.Age = 25);

注意‌:

  • Where 返回的是 IEnumerable,沒有 ForEach 方法,所以需要調(diào)用 .ToList() 轉(zhuǎn)換為列表后再執(zhí)行 ForEach。
  • 但這會創(chuàng)建一個新的臨時列表,如果數(shù)據(jù)量極大,性能略遜于傳統(tǒng) foreach 循環(huán)。

2. 使用傳統(tǒng)foreach循環(huán)(性能最佳,標(biāo)準(zhǔn)做法)

對于需要修改集合元素屬性的場景,傳統(tǒng)的 foreach 循環(huán)是微軟官方推薦的方式,因?yàn)樗逦⒏咝也粍?chuàng)建額外開銷。

foreach (var item in list)
{
    if (item.Name == "Bob")
    {
        item.Age = 40;
    }
}

3. 使用 LINQSelect投影生成新列表(不可變風(fēng)格)

如果你希望保持原列表不變,而是生成一個具有新屬性值的新列表,可以使用 Select。這實(shí)際上不是“賦值”,而是“轉(zhuǎn)換”。

var newList = list.Select(p => new Person 
{ 
    Name = p.Name, 
    Age = p.Name == "Charlie" ? 50 : p.Age // 條件賦值
}).ToList();

適用場景‌:

函數(shù)式編程風(fēng)格,或需要保留原始數(shù)據(jù)快照時。

4. 兩個 List 關(guān)聯(lián)賦值(參考搜索結(jié)果中的場景)

如果需要根據(jù)另一個 List 的值來更新當(dāng)前 List 的屬性(例如根據(jù) ID 匹配更新名稱),可以結(jié)合 Join 或 FirstOrDefault。

方法一:使用 ForEach + FirstOrDefault

listA.ForEach(a => 
{
    var match = listB.FirstOrDefault(b => b.Id == a.Id);
    if (match != null)
    {
        a.Name = match.Name; // 將 listB 的 Name 賦給 listA
    }
});

方法二:使用 Join 投影(生成新列表)

var updatedList = (from a in listA
                   join b in listB on a.Id equals b.Id into joined
                   from b in joined.DefaultIfEmpty()
                   select new PersonA 
                   { 
                       Id = a.Id, 
                       Name = b != null ? b.Name : a.Name 
                   }).ToList();

總結(jié)建議

  • 直接修改原列表‌:優(yōu)先使用 foreach 循環(huán)或 List.ForEach
  • 條件批量修改‌:list.Where(...).ToList().ForEach(...) 寫法簡潔,但注意性能。
  • 生成新列表‌:使用 Select 進(jìn)行投影。
  • 避免‌:不要嘗試在 LINQ 查詢表達(dá)式(如 from...select)中直接執(zhí)行賦值操作(如 x.Prop = value),這違反了 LINQ 的查詢語義,可能導(dǎo)致不可預(yù)知的行為或編譯器警告。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解c# 線程同步

    詳解c# 線程同步

    這篇文章主要介紹了c# 線程同步的相關(guān)資料,文中講解非常細(xì)致,示例代碼幫助大家更好的理解和學(xué)習(xí)c# 多線程,感興趣的朋友可以了解下
    2020-07-07
  • C#中橋接模式的具體使用

    C#中橋接模式的具體使用

    橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,用于將抽象部分與實(shí)現(xiàn)部分分離,本文就來介紹一下C#中橋接模式的具體使用,感興趣的可以了解一下
    2024-11-11
  • C#實(shí)現(xiàn)簡單的計(jì)算器功能(窗體)

    C#實(shí)現(xiàn)簡單的計(jì)算器功能(窗體)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#獲取ListView鼠標(biāo)下的Item實(shí)例

    C#獲取ListView鼠標(biāo)下的Item實(shí)例

    下面小編就為大家?guī)硪黄狢#獲取ListView鼠標(biāo)下的Item實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C#實(shí)現(xiàn)給圖片添加日期信息的示例詳解

    C#實(shí)現(xiàn)給圖片添加日期信息的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)給圖片添加日期信息,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • C#中使用快速排序按文件創(chuàng)建時間將文件排序的源碼

    C#中使用快速排序按文件創(chuàng)建時間將文件排序的源碼

    C#中使用快速排序按文件創(chuàng)建時間將文件排序的源碼...
    2007-03-03
  • Unity中的InitializeOnLoad特性實(shí)踐深入解析

    Unity中的InitializeOnLoad特性實(shí)踐深入解析

    這篇文章主要為大家介紹了Unity中的InitializeOnLoad特性實(shí)踐深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 詳細(xì)介紹C#之文件校驗(yàn)工具的開發(fā)及問題

    詳細(xì)介紹C#之文件校驗(yàn)工具的開發(fā)及問題

    目前校驗(yàn)文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段時間微軟發(fā)布了VisualStudio正式版,win鏡像,微軟官方給出的校驗(yàn)方式都是校驗(yàn)文件的SHA值。下面詳細(xì)介紹C#之文件校驗(yàn)工具的開發(fā)及問題,需要的朋友可以參考下
    2015-07-07
  • C#判斷指定驅(qū)動器是否已經(jīng)準(zhǔn)備就緒的方法

    C#判斷指定驅(qū)動器是否已經(jīng)準(zhǔn)備就緒的方法

    這篇文章主要介紹了C#判斷指定驅(qū)動器是否已經(jīng)準(zhǔn)備就緒的方法,涉及C#針對硬件IO操作的技巧,需要的朋友可以參考下
    2015-04-04
  • C#堆排序?qū)崿F(xiàn)方法

    C#堆排序?qū)崿F(xiàn)方法

    這篇文章主要介紹了C#堆排序?qū)崿F(xiàn)方法,實(shí)例分析了C#對排序的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評論

遂溪县| 宁都县| 汶川县| 米易县| 宜君县| 南漳县| 合川市| 纳雍县| 无极县| 双城市| 滦南县| 奇台县| 武强县| 宁安市| 乡宁县| 吐鲁番市| 会同县| 金平| 温泉县| 博罗县| 普定县| 太仆寺旗| 武乡县| 揭东县| 河西区| 垣曲县| 焦作市| 祁东县| 什邡市| 漳州市| 洛川县| 浦县| 正镶白旗| 遂溪县| 方正县| 茶陵县| 西乌珠穆沁旗| 宜兰市| 连江县| 达日县| 偏关县|