홈>
다음과 같은 항목을 표시하는 콤보 상자가 있습니다 :
Equals
Not Equals
Less Than
Greater Than
이 문자열에는 공백이 포함되어 있습니다. 다음과 같은 항목과 일치하는 열거 형이 정의되어 있습니다.
enum Operation{Equals, Not_Equals, Less_Than, Greater_Than};
공백이 허용되지 않기 때문에 _ 문자를 사용했습니다.
이제 C #에서 루프 나 if 조건을 작성하지 않고 주어진 문자열을 자동으로 열거 형 요소로 변환하는 방법이 있습니까?
- 답변 # 1
- 답변 # 2
Mehrdad의 답변에 따라 사전을 사용하여 전용 매퍼를 만들거나 TypeConverter를 구현하십시오.
맞춤형 TypeConverter가
var op = (Operation)Enum.Parse(typeof(Operation), str.Replace(' ', '_'));
를 대체 할 수 있음 (또는 그 반대) 또는 열거를 반영하고 항목의 표시 텍스트를 결정하는 속성을 사용할 수 있습니다." " -> "_"
이 구현은 여러 가지 방법으로 개선 될 수 있습니다 :
일반화
변환 대상으로 구현
지원 FlagsAttribute
- 답변 # 3
enum Operation { [DisplayName("Equals")] Equals, [DisplayName("Not Equals")] Not_Equals, [DisplayName("Less Than")] Less_Than, [DisplayName("Greater Than")] Greater_Than }; public class OperationTypeConverter : TypeConverter { private static Dictionary<string, Operation> operationMap; static OperationTypeConverter() { BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public; operationMap = enumType.GetFields(bindingFlags).ToDictionary( c => GetDisplayName(c) ); } private static string GetDisplayName(FieldInfo field, Type enumType) { DisplayNameAttribute attr = (DisplayNameAttribute)Attribute.GetCustomAttribute(typeof(DisplayNameAttribute)); return (attr != null) ? attr.DisplayName : field.Name; } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string stringValue = value as string; if (stringValue != null) { Operation operation; if (operationMap.TryGetValue(stringValue, out operation)) { return operation; } else { throw new ArgumentException("Cannot convert '" + stringValue + "' to Operation"); } } } }
"같지 않음"의 경우 위 문장에서 공백을 밑줄로 바꿔야합니다
편집 : 다음 버전은 구문 분석을 시도하기 전에 공백을 밑줄로 바꿉니다.
Operation enumVal = (Operation)Enum.Parse(typeof(Operation), "Equals")
- 답변 # 4
구문 분석법을 사용할 수 있습니다 :
string someInputText; var operation = (Operation)Enum.Parse(typeof(Operation), someInputText.Replace(" ", "_"));
여기의 예제
- 답변 # 5
다른 방법을 사용해야하는 이유 : 열거 형을 문자열로 변환 하시겠습니까?
열거에서 콤보 상자의 항목을 생성하십시오.
Operarion operation = (Operation)Enum.Parse(typeof(Operation), "Not_Equals");
관련 자료
- java - Map 문자열을 Map으로 변환하여 Pathways 속성 중 하나를 설정합니다
- python - 문자열을 나열하고 목록을 문자열로 변환 - 분할없이
- php - elequent laravel에서 배열에서 문자열로 변환
- c# - 암시 적 변환을 사용하여 문자열을 형식으로 캐스팅 할 수 없습니다
- Rust에서 문자열 열거 형을 만들 수 있습니까?
- nullable double 변수를 VBNET에서 문자열로 변환
- 루비 gsub 문자열 전화를 특정 형식으로 변환
- Python 16 진수 문자열을 정수로 변환 오류
- c# - 문자열을 datetime으로 변환하는 문제를 해결하는 방법은 무엇입니까?
- php - 배열에서 문자열로의 변환 오류가 발생하는 이유는 무엇입니까?
- 주어진 JS 구현과 동일한 Java에서 문자열 변환 Base64를 Hex로 구현하는 방법은 무엇입니까?
- Athena (Presto) 문자열을 날짜로 변환
- sql - 문자열에서 날짜 및/또는 시간을 변환 할 때 변환에 실패했습니다 삽입을 시도하는 동안
- dataframe - Pyspark에서 String 데이터 유형에서 Array (Map (Array)) 데이터 유형으로 스키마 변환
와이즈 비즈를 짓는 것이 좋습니다 친숙한 이름을 열거 형 상수에 매핑하고 요소 자체에서 일반적인 명명 규칙을 사용합니다.
또는 현재 방법을 고수하고 싶을 경우에는 수행하지 않는 것이 좋습니다.