예, 당신이 ,
로 값을 분리 할 수는 - Ctrl
및 Esc
이 Keys
값이 유효하지 않기 때문에 그러나 당신의 캐릭터는 여전히 마사지해야합니다. 여전히 유효한 값이어야합니다. 그래서 다음 코드를 고려하십시오
string[] array = value.Split(Enum.enumSeperatorCharArray);
ulong[] array2;
string[] array3;
Enum.GetCachedValuesAndNames(runtimeType, out array2, out array3, true, true);
for (int i = 0; i < array.Length; i++)
{
array[i] = array[i].Trim();
bool flag = false;
int j = 0;
while (j < array3.Length)
{
if (ignoreCase)
{
if (string.Compare(array3[j], array[i], StringComparison.OrdinalIgnoreCase) == 0)
{
goto IL_152;
}
}
else
{
if (array3[j].Equals(array[i]))
{
goto IL_152;
}
}
j++;
continue;
IL_152:
ulong num2 = array2[j];
num |= num2;
flag = true;
break;
}
if (!flag)
{
parseResult.SetFailure(Enum.ParseFailureKind.ArgumentWithParameter, "Arg_EnumValueNotFound", value);
return false;
}
}
enumSeperatorCharArray
의 값은 다음과 같습니다 :
private static readonly char[] enumSeperatorCharArray = new char[]
{
','
};
필자는 자신의 파서를 쓰지 않으려 고했지만 (+ 이와 비슷한 것으로 끝날 것이지만), '+, -'를 치고 공백을 없애고 단일 문자에 대해 ToUpper()를 사용하고 ToLower)'와 더 긴 이름으로 맵핑하지만, 내 경험에 의하면 당신은 항상 이와 같은 소스에서 뭔가를 잊어 버릴 것입니다. – Vyktor
@Vyktor, 당신은 당신 자신의 파서를 쓰고 있지 않습니다. 그러나 문자열을'Enum' 클래스가 문자열을 실제로 파싱 할 수있는 상태로 문자열을 가져와야합니다. 'Ctrl'을 어떻게 해석 할 것으로 기대하십니까? 그게 기적적으로 '통제'로 바뀌나요? 제 말은 여러분이 그것을 약간 마사지해야한다는 말입니다.하지만','이 내장되어 있기 때문에 분리 할 수있는 곳을 찾았습니다. 그리고 나서 약자를 그냥 마사지하십시오. –