일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dotNET
- logging
- ListView
- string
- tls
- Binding
- mysql
- Visual Studio
- algorithm
- windows10
- chashtag
- nullable
- programmers
- git
- Github
- File
- C#
- coding-test
- convert
- .net
- WPF
- Microsoft
- Process
- log
- IValueConverter
- csharp
- commit
- Coding
- 코딩테스트
- windows
Archives
- Today
- Total
CHashtag
[C#] parse string to enum 대소문자 무시 (ignore case) 본문
반응형
안녕하세요.
오늘은 string을 enum으로 변환할 때, 대소문자 구분 없이 string을 enum으로 변환하는 방법에 대해 알아보도록 하겠습니다.
방법은 간단합니다.
Enum.Parse의 인자 중 세 번째 인자인 ignoreCase를 사용하면 됩니다.
(해당 인자를 사용하지 않으면 ArgumentException이 발생합니다.)
enum Alphabet
{
A, B, C
}
class Program
{
public void Main()
{
Alphabet alphabet1 = (Alphabet)Enum.Parse(typeof(Alphabet), "a", true);
// alphabet1 = Alphabet.A
Alphabet alphabet2 = (Alphabet)Enum.Parse(typeof(Alphabet), "a");
// System.ArgumentException: '요청한 값 'a'을(를) 찾을 수 없습니다.'
}
}
그렇다면 만약 대소문자를 무시하면 동일한 enum 값이 존재한다면 어떻게 될까요?
(C# enum은 대소문자를 구분하는것이 기본 정책입니다.)
결과는 "더 앞에 선언된 enum이 선택된다." 입니다.
이해를 돕기 위해 예제 코드를 작성해보았습니다.
// 소문자가 앞에있는 enum
enum Alphabet1
{
a, A, b, B, c, C
}
// 대문자가 앞에있는 enum
enum Alphabet2
{
A, a, B, b, C, c
}
class Program
{
public void Main()
{
Alphabet1 alphabet1 = (Alphabet1)Enum.Parse(typeof(Alphabet1), "a", true);
// alphabet1: Alphabet.a
Alphabet2 alphabet2 = (Alphabet2)Enum.Parse(typeof(Alphabet2), "a", true);
// alphabet2: Alphabet.A
}
}
그 이유는 내부적으로 Enum.Parse에서 enum 순서대로 for문을 돌기 때문입니다.
(더 상세한 내용을 알고 싶으시다면 referencesource.microsoft.com/#mscorlib/system/enum.cs,25a49abd9da136dd 를 찾아보시면 됩니다. 글의 주제와 멀어져 자세한 설명은 생략하도록 하겠습니다.)
감사합니다.
반응형
'C#' 카테고리의 다른 글
[C#] Visual Studio 빌드시 pdb 파일 안나오게 하는법(or 나오게 하는법) (0) | 2021.05.07 |
---|---|
[C#] 코딩 규칙 (Coding Convention) (0) | 2021.05.06 |
[C#] enum to string, string to enum 변환 (0) | 2021.03.01 |
[C#] 다른 프로세스가 읽을 수 있게 파일 열기 (FileAccess, FileShare) (0) | 2021.02.26 |
[C#] 요청이 중단되었습니다. ssl/tls 보안 채널을 만들 수 없습니다 해결법 (1) | 2021.02.22 |