回覆列表
-
1 # fxioadwre
-
2 # 我是阿嘛
你需要理解什麼是陣列Array,什麼是集合IConnection,什麼是IList開始.
舉個簡單例子:
陣列如 string ar=new string[]{"a","b","c"}
這是一個簡單字串陣列。
假設我需要提取陣列中的每一個元素,我該怎麼辦呢?
所以那些天才們就想出一種方案,用C#語法表達是:
forech(string item in ar)
{
MessageBox.Show(item);
}
然後你可以把forech(string item in ar)這種語法理解為迭代器.
專業解釋:
1.迭代器是可以返回相同型別值的有序序列的一段程式碼;
2.迭代器可用作方法、運算子或get訪問器的程式碼體;
3.迭代器程式碼使用yield return語句依次返回每個元素,yield break將終止迭代;
4.可以在類中實現多個迭代器,每個迭代器都必須像任何類成員一樣有惟一的名稱,並且可以在foreach語句中被客戶端程式碼呼叫;
5.迭代器的返回型別必須為IEnumerable和IEnumerator中的任意一種;
6.迭代器是產生值的有序序列的一個語句塊,不同於有一個 或多個yield語句存在的常規語句塊;
7.迭代器不是一種成員,它只是實現函式成員的方式,理解這一點是很重要的,一個透過迭代器實現的成員,可以被其他可能或不可能透過迭代器實現的成員覆蓋和過載;
8.迭代器塊在C#語法中不是獨特的元素,它們在幾個方面受到限制,並且主要作用在函式成員宣告的語義上,它們在語法上只是語句塊而已;
今天寫程式碼遇到這個坑 來強答一下auto用冒號進行遍歷的時候 應該是按值傳遞 複製了一份map的一個Key-Value 這時無法對map內的數值進行操作更改 而用auto iter = map.begin()時 等於迭代器使用 這時可以更改容器以下為參考程式碼int main(){ std::map<int, int> Data; Data.insert(make_pair(1, 1)); for (auto iter:Data) { iter.second = 5;//這裡不會修改map的值 } for (auto iter = Data.begin(); iter != Data.end(); iter++) { iter->second = 5;//這裡map內的值會變成5 }////更新 其實也可以傳引用進去修改for (auto &iter:Data){iter.second = 5;//這裡map內的值會變成5} system("pause"); return 0;}