๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/C#

[C#] LINQ์—์„œ foreach๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์“ฐ๋ฉด ์•ˆ๋˜๋Š” ์ด์œ 

by HanaV 2023. 10. 12.
728x90
 
 

LINQ์™€ foreach

 

var list = new List<Profile>
{
    new Profile() { Name = "A", Age = 1 },
    new Profile() { Name = "B", Age = 2 },
    new Profile() { Name = "C", Age = 3 },
    new Profile() { Name = "D", Age = 4 },
    new Profile() { Name = "E", Age = 5 },
    new Profile() { Name = "F", Age = 3 },
};

var a = list.Where(profile => profile.Age > 1);

if (a.Any()) {
    foreach (var profile in a) {
        Console.WriteLine(profile.Name);
    }
    foreach (var profile in a) {
        Console.WriteLine(profile.Age);
    }
}

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด a์— Age๊ฐ€ 1๋ณด๋‹ค ํฐ B, C, D, E, F๊ฐ€ ๋‹ด๊ธฐ๊ณ , ๊ทธ๊ฑฐ์— ๋งž๋Š” name๋“ค๊ณผ age๋“ค์ด ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ, profile.Age > 1 ์ด ๋ถ€๋ถ„์€ ์ด ์ฝ”๋“œ์—์„œ ๋ช‡ ๋ฒˆ ์‹คํ–‰๋ ๊นŒ?

๋‹น์—ฐํžˆ var a๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— 1๋ฒˆ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ด๋‹ค. ์ ์–ด๋„ ๋‚˜๋Š” ๊ทธ๋žฌ๋‹ค.
ํ•˜์ง€๋งŒ Break point๋ฅผ ์žก๊ณ  ๋””๋ฒ„๊น…์„ ํ•ด๋ณด๋ฉด 1๋ฒˆ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Break Point๋ฅผ ์žก๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ด๋ ‡๊ฒŒ ๋ณ€ํ˜•ํ•˜์˜€๋‹ค.

IEnumerable<Profile> Check(List<Profile> list)
{
    return list.Where(profile =>
    {
        return profile.Age > 1;
    });
}

var a = Check(list);

๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ Break Point๋ฅผ ์žก๊ณ  ์‹คํ–‰์‹œํ‚ค๋ฉด 

1. var a = Check(list);
2. a.Any()
3. return profile.Age > 1;
4. foreach ( ... a)
5. return profile.Age > 1;
6. Console.WriteLine()
7. foreach ( ... a)
8. return profile.Age > 1;
9. Console.WriteLine()

์œ„์™€ ๊ฐ™์ด 3๋ฒˆ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

var a = Check(list) ๋Š” a์— Check(list)์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๋ผ, Check(list)๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์ด๋ฉฐ ์ด๋•Œ๋งˆ๋‹ค Check(list)๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ์ด์œ ๋Š” IEnumerable<T> ์‹œํ€€์Šค์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์„ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์„ ์–ธํ•  ๋•Œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ , ๋‚˜์ค‘์œผ๋กœ ๋ฏธ๋ฃจ๋Š” ๊ฒƒ์„ "์ง€์—ฐ ์‹คํ–‰" ๋˜๋Š” "์ง€์—ฐ ๋กœ๋”ฉ"์ด๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ LINQ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ foreach๋‚˜ ๋˜ ๋‹ค๋ฅธ LINQ๋ฌธ์„ ์„ ์–ธํ•œ๋‹ค๋ฉด, ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. 
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„์˜ˆ list๋กœ ๋ณ€ํ™˜์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

var a = list.Where(profile => profile.Age > 1).ToList();

 

728x90

"); wcs_do();