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

[C#] LINQ์˜ Single()์— ๋Œ€ํ•ด์„œ

by HanaV 2023. 10. 12.
728x90
 
 

Single()

 

single์€ ์ปฌ๋ ‰์…˜์—์„œ ์œ ์ผํ•œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

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 = 6 }
};

var singleList = list.Single(x => x.Age == 3);
Console.WriteLine(singleList.ToString());

์œ„ list์—์„œ Age๊ฐ€ 3์ธ ์š”์†Œ๋Š” ํ•˜๋‚˜๋ฐ–์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— C๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทผ๋ฐ ๋งŒ์•ฝ ์œ ์ผํ•œ ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

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 singleList = list.Single(x => x.Age == 3);

์ด๋ ‡๊ฒŒ Age๊ฐ€ 3์ธ ์š”์†Œ๋Š” C, F ๋‘ ๊ฐœ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค.

Unhandled exception. System.InvalidOperationException: Sequence contains more than one matching element

 

์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด Single()์€ ์ปฌ๋ ‰์…˜์—์„œ ์œ ์ผํ•œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ Single์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ ์ด
1. ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์œ ์ผํ•œ์ง€ ์•„๋‹Œ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ
2. ๊ทธ ๊ฐ’์„ ์œ ์ผํ•œ์ง€ ํ™•์ธํ•˜๊ณ 
3. ๊ทธ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด
Single์„ ์“ฐ๋Š” ๊ฒƒ์ด ๋งž๋‹ค.

ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ๋‚ด๊ฐ€ ์ด ์ปฌ๋ ‰์…˜์ด ์œ ์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด First()๋‚˜ Last()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์ ์œผ๋กœ ์ข‹๋‹ค.

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 = 6 }
};

๋งŒ์•ฝ Single()์„ ์‚ฌ์šฉํ•ด์„œ Age = 3์ธ ๊ฐ’์„ ์œ„ list๋ฅผ ์ˆœํšŒํ•œ๋‹ค๋ฉด, C๊ฐ€ Age=3์ธ ๊ฒƒ์„ ํ™•์ธํ–ˆ์Œ์—๋„ F๊นŒ์ง€ ์ „๋ถ€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
First()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, C๊ฐ€ Age=3์ธ ๊ฒƒ์„ ํ™•์ธํ•œ ์ˆœ๊ฐ„, ๋” ์ด์ƒ ์ฐพ์ง€ ์•Š๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Single()์€ ์œ ์ผํ•œ ๊ฐ’์„ ๋ฐœ๊ฒฌํ•ด๋„ ๊ทธ ๊ฐ’์ด ์œ ์ผํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ปฌ๋ ‰์…˜ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•  ์ˆ˜๋ฐ–์— ์—†๋‹ค. First()์™€ Last()๋Š” ๊ฐ’์„ ๋ฐœ๊ฒฌํ•œ ์ˆœ๊ฐ„ ์ค‘๋‹จํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ผํ•œ ๊ฐ’์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๋ฉด Single()์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค.

728x90

"); wcs_do();