涉及 C 的 foreach問題

2022-02-24 22:14:36 字數 2079 閱讀 8809

當時是用foreach實現遍歷,但是函式傳入引數是object型別的,由於objectl型別沒有實現相關介面,所以foreach並不能執行。

那麼下面我們來看看,想要使用foreach需要具備什麼條件。

需要實現ienumerable介面或宣告getenumerator方法的型別。

下面我們來看看foreach原理,

參考原文

為什麼有些類可以可以用foreach遍歷,有些類卻不可以了.經反編譯過後得出:

//任何型別,只要想使用foreach來迴圈遍歷,就必須在當前型別中

//存在: public ienumerator getenumerator()方法,(一般情況我們會通過實現ienumerable介面,來建立該方法。)

foreach (string item in

p)

//ienumerator etor = p.getenumerator();

//while (etor.movenext())

//

console.readkey();

} }

public

class

person : ienumerable

} public

string

this[int

index]

set

else

} }

public

string

name

public

intage

public

string

email

#region ienumerable 成員

//這個方法的作用不是用來遍歷的,而是用來獲取乙個物件

//這個物件才是用來遍歷的。

public

ienumerator getenumerator()

#endregion

}

//這個型別,的作用就是用來遍歷person中的list集合的。

public

class

personenumerator : ienumerator

//這個欄位中儲存的就是person物件中的listcar集合

private listcars;

//假設一開始遍歷的物件的索引是-1

private

int index = -1

;

#region ienumerator 成員

//表示獲取當前正在遍歷的那個物件

public

object

current

return

cars[index];

} }

//讓自定義下標index累加

public

bool

movenext()

else

} public

void

reset()

#endregion

} }

如果大家想要詳細了解 foreach語句。建議大家學習一下迭代器。

參考**

棧涉及的問題

question 記憶體中的堆疊和資料結構的堆疊 answer 1.記憶體中的堆疊是真實存在的物理區,資料結構中的堆疊是抽象的資料儲存結構 記憶體空間邏輯上分為 區 靜態資料區 動態資料區 棧區 堆區 區儲存二進位制 作業排程,記憶體排程,程序排程,控制 區執行 切換 靜態資料區 儲存全域性變數 靜...

MySQL涉及鎖的問題

如何併發的訪問資料庫呢?答案就是加鎖。接下來說一下,資料庫的鎖機制,資料庫中都有哪些鎖?首先呢,鎖是一種併發控制技術,鎖是用來在多個使用者同時訪問同乙個資料的時候保護資料的。有2種基本的鎖型別 共享 s 鎖 多個事務可封鎖乙個共享頁 任何事務都不能修改該頁 通常是該頁被讀取完畢,s鎖立即被釋放。在執...

foreach中引用 的問題

在工作中遇到 關於 php foreach 引用的乙個問題 簡單來說,如下 arr array a b c d foreach arr as k v foreach arr as k v print r arr 結果是 ab cc參考了 這篇文章,以及 這篇文章 在第一次foreach 遍歷結束後,...