나는 간단한 파싱 문제를 해결하려고 노력하고 있으며 선택 목록을 인코딩하기 위해 enum을 사용하기로했다.총체적으로 enum을 형 변환 할 수 있습니까?
입력 데이터는 데이터가있는 고유 한 헤더와 고유하지 않은 식별자가있는 블록으로 분리 된 곧은 ASCII 텍스트입니다. 나는 데이터 의미에 대한 어떠한 문맥도 제공하지 않고 아주 일반적인 상징적 인 방법을 쓸 수 있으며 반환 된 후에는 그것을 처리 할 수 있습니다.
문자열을 사용하면 문제가 없습니다. 나는 목록을 지나가고 우리가 간다.
열거 형을 일반화하는 구문을 이해할 수 없으며 일부 도움이 필요합니다. 나는 또한 명령적인 사고와 너무 쉬운 대답에 빠져있을 수 있습니다. 내가
private enum Colors { red, white, green };
private enum Suits { spades, clubs, hearts, diamonds };
// ... open files, read data, etc
// so I pass in the enum that I want my result in and some text identifiers
parseToEnum (Colors, searchBlock, "startColorBlock", "endColorBlock", "id=");
parseToEnum (Suits, searchBlock, "startCardSuitsBlock", "endCardSuitsBlock", "<id=");
// ...
그래서 아이디어는 입력이 있기 때문에 (동일한 구조를 사용하는 것입니다 뭘하는지 여기
은의private void parseToEnums(Enum returnEnum, string searchBlock, string startIDText,
string endIDText, string startText, string endText)
{
string ourSearchBlock = searchBlock;
int endIDidx = ourSearchBlock.IndexOf(endIDText);
while (ourSearchBlock.IndexOf(startText) != -1)
{
if (ourSearchBlock.Length == searchBlock.Length)
{
// first pass, trim off the region where the start text isn't valid
ourSearchBlock = ourSearchBlock.Remove(endIDidx, ourSearchBlock.Length - endIDidx);
// first pass, use the startIDtext to create a valid search zone
// BROKEN CODE HERE
// Neither GetType() nor typeof seem to do the right thing
// I have tried several varieties and have tried casting the LHS in the
// same sort of way
// pluckText returns a string that is guaranteed to match an enum name
returnEnum = (returnEnum.GetType()) System.Enum.Parse(typeof(returnEnum), pluckText(ourSearchBlock, startIDText, startText, endText), false);
ourSearchBlock = ourSearchBlock.Remove(0, ourSearchBlock.IndexOf(startIDText) + startIDText.Length);
}
else
{
// this would be similar to the above after it's working
// and is for the case where the string has multiple matches
// within the enum, ie "red white"
//returnList.Add(pluckText(ourSearchBlock, "", startText, endText));
}
ourSearchBlock = ourSearchBlock.Remove(0, ourSearchBlock.IndexOf(startText) + startText.Length);
}
return;
}
예와 내가 힘든 시간을 보내고있어 코드의 같은)하지만 출력에 대해 다른 열거 형을 사용하십시오.
너무 오래 걸리기 전에 try/catch 래퍼와 일반적인 오류 검색을이 코드에 추가해야한다는 것을 알고 있습니다.
나는 그것을 포함하지 않은 경우 검색 :-)를 무시하고 자유롭게, 누군가가 충분한 정보를 제공하지 않는 나를 비난했을 것이다. 나는 이것을 많이 좋아하고 그것을 소용돌이 칠 것이다. – Stephen
나는 또한 내가 color & = Par ...라고 쓸 수 있다는 점을 좋아한다. 이 방법으로 – Stephen
당신은 그것을 쓰지만, 아마도 당신이 원하는대로 작동하지 않을 것입니다. '결합 | 동시에 여러 값을 나타낼 수있는'enum'를 원한다면, 당신은 중복되지 않는 바이너리 값으로 값을 (1, 2, 4, 8, ... 등) 및 사용 '으로 설정해야 그들. – svick