티스토리 뷰
목차
C# 6.0으로 구현하는 문자열 보간
조건문에 Lambda 람다 추가하여 string Interpolation 구현
프로그래밍 언어에서 조건문이란 조건을 처리하는 과정(소스 코드)입니다. if~else, switch~case, 삼항 조건 연산자(Ternary Operators)는 람다로 대체하거나 섞어서 사용할 수 있습니다. 이 예제에서 몇 가지 구체적인 예제로 문자열 보간 방법을 알아보겠습니다.
예제 1 : Statement Lambda와 if~else 응용
어떤 사람이 투표에 참여할 수 있는지 확인하는 예제를 C# 6.0 〈스테이트먼트 람다〉로 구현합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var personData = new List<PersonMaster>(); //populating some data Enumerable .Range(1, 10) .ToList() .ForEach( i => personData.Add(new PersonMaster { PersonID = i, PersonName = string.Concat("Person ", i), Age = 14+i }) ); //Use of Statement Lambda var eligiblePersonData = new List<EligiblePerson>(); personData .ToList() .ForEach(i => { if (i.Age < 18) Console.WriteLine("Mr. {0} is not eligible to case vote as his age is {1} which is under 18",i.PersonName,i.Age); else eligiblePersonData.Add(new EligiblePerson { PersonID = i.PersonID, PersonName = i.PersonName, Age = i.Age }); }); Console.ReadKey(); } } //The main person model public class PersonMaster { public int PersonID { get; set; } public string PersonName { get; set; } public int Age { get; set; } } //Eligible Person Model public class EligiblePerson { public int PersonID { get; set; } public string PersonName { get; set; } public int Age { get; set; } } } | cs |
다음 그림에서 알 수 있듯이 if ~ else 구간을 Statement Lambda로 대체하여 문자열 합치기가 가능합니다.
[닷넷 문자열 선형 보간, string format]
스테이트먼트 람다가 적용된 영역입니다.
예제 2 : 삼항 연산자와 Statement Lambda 응용
1번 예제와 비슷하지만 삼항 연산자 ternary operator를 사용한 소스입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | personData .ToList() .ForEach(i => { switch(i.Age < 18 ? 0:1) // note the way the ternary operator is used inside the switch statement as an expression { case 0: Console.WriteLine("Mr. {0} is not eligible to case vote as his age is {1} which is under 18", i.PersonName, i.Age); break; case 1: eligiblePersonData.Add(new EligiblePerson { PersonID = i.PersonID, PersonName = i.PersonName, Age = i.Age }); break; } }); | cs |
람다 코드 자체는 if~else 문과 똑같습니다.
C# 6.0 문자열 보간 사용 방법
위의 코드를 C# 6.0의 String Interpolation로 다시 구현합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | switch (i.Age < 18 ? 0 : 1) { case 0: //note the usage of String Interpolation - a feature of C# 6.0 string toDisplay = $"Mr. {i.PersonName} is not eligible to case vote as his age is {i.Age} which is under 18"; Console.WriteLine(toDisplay); break; case 1: eligiblePersonData.Add(new EligiblePerson { PersonID = i.PersonID, PersonName = i.PersonName, Age = i.Age }); break; } | cs |
C# 6.0에는 문자열 사이를 이어주는 보간 기능이 따로 있습니다. 실제 프로퍼티를 아래와 같이 사용하는 것입니다.
【 {i.PersonName} 】
【 {i.Age} 】
이렇게 사용할 경우 새로운 문자열을 보간할 땐 $ 기호를 붙여야 합니다.
런타임 단계에서 {i.PersonName}은 프로퍼티 값이 대입됩니다.
[닷넷 문자열 선형 보간, string format]
IL 컴파일 시기 {i.PsersonName}을 System.String으로 호출하는 것이 확인됩니다. String Interpolation은 string.Format 함수를 호출하기 위해 컴파일러가 생성하는 일종의 속임수(trick)과도 같습니다.
위의 예제를 실행하면 결과는 다음과 같습니다.
[닷넷 문자열 선형 보간, string format]
첨부 파일
C# 6.0으로 구현하는 문자열 보간
조건문에 Lambda 람다 추가하여 string Interpolation 구현