欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# foreach獲取循環(huán)索引的四種方法

 更新時間:2025年03月07日 10:44:18   作者:NotOnlyCoding  
在C#中使用foreach循環(huán)的時候我們有時會碰到需要索引的情況,在for循環(huán)中我們可以得到循環(huán)索引 , foreach并不直接提供 , 下面介紹4種foreach獲取索引的方法,希望對大家有用處,需要的朋友可以參考下

一、手動維護索引變量

‌實現(xiàn)方式‌:

在循環(huán)外部聲明 index 變量,每次循環(huán)時手動遞增:

int index = 0;
foreach (var item in collection)
{
Console.WriteLine($"{index}: {item}");
index++;
}

‌特點‌:

  • 簡單直接,無需引入額外依賴‌。
  • 需注意線程安全及變量作用域問題。

二、LINQ Select + 元組解構(gòu)

‌實現(xiàn)方式‌:

通過 Select 方法將元素與索引綁定為元組,結(jié)合 C# 7.0+ 的元組解構(gòu)語法:

foreach (var (item, index) in collection.Select((value, i) => (value, i)))
{
Console.WriteLine($"{index}: {item}");
}

‌特點‌:

  • 代碼簡潔,無需外部變量‌。
  • 需注意 System.Linq 命名空間和 System.ValueTuple 包(舊版本需手動安裝)‌。

三、擴展方法封裝

‌實現(xiàn)方式‌:

自定義擴展方法 WithIndex,增強代碼復(fù)用性:

public static IEnumerable<(T item, int index)> WithIndex(this IEnumerable source)
{
return source.Select((item, index) => (item, index));
}

// 調(diào)用
foreach (var (item, index) in collection.WithIndex())
{
Console.WriteLine($"{index}: {item}");
}

‌特點‌:

  • 提高代碼可讀性和復(fù)用性‌。
  • 需在靜態(tài)類中定義擴展方法。

四、IndexOf 方法(需謹(jǐn)慎)

‌實現(xiàn)方式‌:

調(diào)用集合的 IndexOf 方法直接獲取元素索引(適用于 List 等支持索引查找的集合):

foreach (var item in collection)
{
int index = collection.IndexOf(item);
Console.WriteLine($"{index}: {item}");
}

特點‌:

  • 依賴集合的 IndexOf 實現(xiàn),僅適用于元素唯一且支持索引查找的集合‌。
  • 性能較差‌:每次循環(huán)均遍歷集合查找索引,時間復(fù)雜度為 O(n^2)‌。
  • 局限性‌:集合中存在重復(fù)元素時可能返回錯誤索引。

性能與適用性‌

  • 手動維護索引‌:適用于簡單場景,性能最優(yōu)‌。
  • LINQ 方法‌:引入輕微性能開銷(如迭代器生成),但對大多數(shù)場景影響可忽略‌。
  • 擴展方法‌:適合高頻使用場景,平衡性能與代碼整潔度‌。
  • IndexOf:元素唯一且需動態(tài)查找索引,性能差,重復(fù)元素不可靠‌。

選擇時需根據(jù)具體需求(如代碼簡潔性、性能要求、框架版本兼容性)綜合考量。

到此這篇關(guān)于C# foreach獲取循環(huán)索引的四種方法的文章就介紹到這了,更多相關(guān)C# foreach獲取索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較(Unity3D游戲開發(fā))

    C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較(Unity3D游戲開發(fā))

    在本篇內(nèi)容里我們給大家整理了關(guān)于Unity3D游戲開發(fā)中C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較相關(guān)知識點內(nèi)容,需要的朋友們參考下。
    2019-05-05
  • C#中將dateTimePicker初始值設(shè)置為空

    C#中將dateTimePicker初始值設(shè)置為空

    本文主要介紹了C#中將dateTimePicker初始值設(shè)置為空,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C#中字符串編碼處理

    C#中字符串編碼處理

    C#中字符串編碼處理,需要的朋友可以參考一下
    2013-03-03
  • 測試stringbuilder運行效率示例

    測試stringbuilder運行效率示例

    測試StringBuilder的運行效率,大家參考使用吧
    2013-12-12
  • C#匿名委托和Java匿名局部內(nèi)部類使用方法示例

    C#匿名委托和Java匿名局部內(nèi)部類使用方法示例

    Java在嵌套類型這里提供的特性比較多,假設(shè):Java的字節(jié)碼只支持靜態(tài)嵌套類,內(nèi)部類、局部內(nèi)部類和匿名局部內(nèi)部類都是編譯器提供的語法糖,這個假設(shè)目前沒法驗證(看不懂字節(jié)碼),本文先來看一下C#是如何為我們提供的這種語法糖
    2013-11-11
  • Unity接入高德開放API實現(xiàn)IP定位

    Unity接入高德開放API實現(xiàn)IP定位

    這篇文章主要為大家介紹了Unity如何接入高德開放API實現(xiàn)IP定位功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定參考價值,需要的可以參考一下
    2022-04-04
  • C#中屬性(Attribute)的用法

    C#中屬性(Attribute)的用法

    這篇文章介紹了C#中屬性(Attribute)的用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#操作圖片讀取和存儲SQLserver實現(xiàn)代碼

    C#操作圖片讀取和存儲SQLserver實現(xiàn)代碼

    用C#將Image轉(zhuǎn)換成byte[]并插入數(shù)據(jù)庫/將圖片數(shù)據(jù)從SQLserver中取出來并顯示到pictureBox控件上,接下來將為你詳細介紹下實現(xiàn)步驟,感興趣的你可以參考下
    2013-03-03
  • C#調(diào)用CMD命令實例

    C#調(diào)用CMD命令實例

    這篇文章主要介紹了C#調(diào)用CMD命令實例本文只是給出一個比較簡單的、入門級的例子,更多高級的操作技巧請參閱相關(guān)文章,需要的朋友可以參考下
    2014-08-08
  • C#中SerialPort的使用教程詳解

    C#中SerialPort的使用教程詳解

    SerilPort是串口進行數(shù)據(jù)通信的一個控件,這篇文章主要為大家詳細介紹了C#中SerialPort的使用,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12

最新評論