【发布时间】:2013-07-18 19:36:34
【问题描述】:
我已经定义了枚举事件:
public enum Events {
UNLOCK = 1,
LOCK = 2
}
还有 CSV 字符串:
var csv = "1,2";
在 C# 中将 csv 字符串转换为 List
【问题讨论】:
我已经定义了枚举事件:
public enum Events {
UNLOCK = 1,
LOCK = 2
}
还有 CSV 字符串:
var csv = "1,2";
在 C# 中将 csv 字符串转换为 List
【问题讨论】:
csv.Split(',').Select(s => (Events)Enum.Parse(typeof(Events), s));
顺便说一句,generic enum class 你可以这样解析Enum<Events>.Parse(s),整个代码看起来像:
csv.Split(',').Select(Enum<Events>.Parse)
【讨论】:
csv.Split(',').Select(x => (Events)int.Parse(x)).ToList();
【讨论】:
更详细的方式:
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()
});
【讨论】: