내가 정의한 열거 이벤트리스트로 변환하는 방법 :CSV 문자열 <Enum>
public enum Events {
UNLOCK = 1,
LOCK = 2
}
뿐만 아니라 CSV 문자열 :
var csv = "1,2";
하는 < 이벤트를 나열하는 CSV 문자열을 변환하는 것이 방법이 될 것입니다 무엇을 > C에서?
내가 정의한 열거 이벤트리스트로 변환하는 방법 :CSV 문자열 <Enum>
public enum Events {
UNLOCK = 1,
LOCK = 2
}
뿐만 아니라 CSV 문자열 :
var csv = "1,2";
하는 < 이벤트를 나열하는 CSV 문자열을 변환하는 것이 방법이 될 것입니다 무엇을 > C에서?
csv.Split(',').Select(s => (Events)Enum.Parse(typeof(Events), s));
BTW generic enum class에이 방법 Enum<Events>.Parse(s)
을 구문 분석 할 수 및 전체 코드는 다음과 같이 표시됩니다
csv.Split(',').Select(Enum<Events>.Parse)
csv.Split(',').Select(x => (Events)int.Parse(x)).ToList();
여기있는 동안 : 왜, downvoter? –
아마도 귀하의 답변이 목록을 반환하지 않았기 때문일 수 있습니다. 그냥 추측. – Gratzy
@Gratzy 어느 쪽도 가장 upvoted 대답을하지 않습니다 ... –
더 자세한 방법 :
var csv = "2,1,1,2,2,1";
List<Events> EventList = new List<Events>();
foreach (string s in csv.Split(','))
{
EventList.Add((Events)Enum.Parse(typeof(Events), s, true));
}
전체 CSV 라인의 경우 이벤트가 아니라 정규 표현식을 사용하여 선을 구성 요소로 파싱합니다. 여기서 우리는 혼합 된 CSV 라인을 가지고 정규 표현식은 명명 된 매치 캡처를 사용하여 각 값을 구분할 수 있습니다. 거기에서 우리는 linq을 사용하여 발견 된 각 데이터 행에 대해 새로운 투영법으로 파싱합니다.
var csvLine = "1245,1,2,StackOverFlow";
var pattern = @"
^ # Start at the beginning of each line.
(?<IDasInteger>[^,]+) # First one is an ID
(?:,) # Match but don't capture the comma
((?<Events>[^,]+)(?:,)){2} # 2 Events
(?<Summary>[^\r\n]+) # Summary text";
var resultParsed = Regex.Matches(csvLine, pattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline)
.OfType<Match>()
.Select (mt => new {
ID = int.Parse (mt.Groups["IDasInteger"].ToString()),
Event = mt.Groups["Events"].Captures
.OfType<Capture>()
.Select (cp => (Events)Enum.Parse(typeof(Events), cp.Value))),
Summary = mt.Groups["Summary"].ToString()
});
mt.Groups [ "Events"], 그렇지 않습니까? 마법의 문자열 지옥처럼 보이 : 왜 그냥 많은 이유는 @ lazyberezovsky 꽤 많이 대답했을 때 생각 :) :) – user576700
@ user576700 나는 여러 개의 데이터 열을 가지고있는 CSV 파일을 다뤘다. 명명 된 캡처를 지정함으로써 올바른 데이터가 처리시 올바른 위치에 저장되도록했습니다. 귀하의 상황에 대해서는 아무런 의미가 없지만 획득 한 데이터의 유형과 수량이 다른보다 강력한 상황의 경우 각 행의 정규식이라는 캡처는 매우 좋은 선택 일 수 있습니다. 다른 대답에 관해서, 나는 대부분의 사람들이 다른 시나리오 중에서 선택할 수 있기를 바랍니다. 나도 알아. – OmegaMan
고맙습니다. csv.Split (',')을 선택해 주셔서 감사합니다 .Select (S => (T) Enum.Parse (typeof (T), s)). ToList(); – user576700
@ user576700 아이디어가 이미 있습니다 - [일반 에니엄 클래스] (http://stackoverflow.com/a/13248913/470005)를 만들 수 있습니다. 대답 : –