C#foreach에서 자체 정렬에 데이터 추가

7911 단어 STLC# 시작C#C++
앞에 쓴 글의 부분(C++)을 발췌한 후 C# 코드가 있으니 당황하지 마세요.
main.cpp

#include <iostream>
#include <vector>
using namespace std;

void Print(vector<int> v)
{
    for (auto& i : v)
    {
        cout << " " << i ;
    }
    cout << endl;
}

int main()
{
    vector<int> vkeep{ 5, 5, 0, 5, 1 }; //5個
    Print(v);
    cout << "--- rfor内で自身のコンテナ追加 ------rforの値がバグる--------------" << endl;
    for (auto& i : v)
    {
        cout << " " << i ;
        if (i == 5)
            v.emplace_back(123);
            //v.push_back(123);
    }
    cout << endl << "-----5は3つあるので3つ123が増えないといけないが、バグっている-----" << endl;
    Print(v);
}
실행 결과, 이동 전화의 위치가 이상해지고 오류가 아니라 오류가 발생했습니다<<규격과 같습니다(디버깅이나 디버깅 실행 중 오류가 발생했으면 좋겠습니다...)
실행 결과: 요소 수가 증가하지 않아도 값은 -52662307로 나타납니다
--- rfor内で自身のコンテナ追加 ------rforの値がバグる--------------
 5 -572662307 -572662307 -572662307 -572662307
이 C#버전을 만드는 김에 λ기술방법도 잊어버렸으니 확인해 보세요
결론적으로 원소 수량을foreach 내의 자체 배열(List)으로 늘리면 실행 중 오류가 발생합니다.
다음은 다른 배열(List)이 준비되어 있으며, 잠시 여기에 추가(Addrange)
main.cs
using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            List<int> v = new List<int>(){ 5, 5, 0, 5, 1 };
            var vpp = new List<int>();
            foreach (var a in v)
            {
                //if (a == 5) v.Add(123); //error
                if (a == 5) vpp.Add(123);
            }
            // ラムダで書いたバージョン
            //v.ForEach(a => { if (a == 5) v.Add(123); });   //error
            //v.ForEach(a => { if (a == 5) vpp.Add(123); });
            v.AddRange(vpp); // v配列に appデータを増やす
            foreach(var a in v)
            {
                Console.Write(" {0}",a);
            }
            // ラムダで書いたバージョン
            //v.ForEach(a =>{
            //    Console.Write(" {0}",a);
            //});
            Console.WriteLine();
        }
    }
}
실행 결과
Hello World!
 5 5 0 5 1 123 123 123

참고로 잘못된 주석 행의 주석을 제거하더라도 구축 오류가 발생하지 않습니다.실행 중 오류가 발생했습니다.
C#에서 foreach에서 자체 정렬을 변경할 수 없습니다.
실행 후 오류는foreach 줄에 바로 나타납니다.

C++에서 참조형을 사용하면 rfor 내의 배열 내의 값은 변경할 수 있지만 C#에서foreach 내에서는 변경할 수 없습니다.
그 요소에 대한 증가도 마찬가지다.
※ 비주얼스튜디오는 2010년 C#에서foreach에서 자신의 값을 변경할 수 있어 편리하다...시대의 트렌드인가

좋은 웹페이지 즐겨찾기