如果我有一个管道分隔列表,我可以自动将它们拆分成一个GUID数组吗?
所以
“GUID1 | GUID2”
然后Guid[] values = selectedValue.Split("|".ToCharArray());
本来不错。
答案 0 :(得分:29)
几乎:
Guid[] values = selectedValue.Split('|').Select(s => Guid.Parse(s)).ToArray();
如果任何Guids无效,则会抛出FormatException。
如果你想忽略它们,你可以在评论中做到杰里米所建议的那样:
"9FE027E0-CF95-492F-821C-3F2EC9472657|bla|D94DF6DB-85C1-4312-9702-FB03A731A2B1"
.Split('|')
.Where(g => { Guid temp; return Guid.TryParse(g, out temp); })
.Select(g => Guid.Parse(g))
.ToArray()
也许这可以进一步优化(我们基本上解析每个数字两次)或者只是忽略了97%的过早优化无关紧要。
答案 1 :(得分:0)
为了避免双重解析,我会"重新短语"它为:
"9FE027E0-CF95-492F-821C-3F2EC9472657|bla|D94DF6DB-85C1-4312-9702-FB03A731A2B1"
.Split('|')
.Select(g => { Guid temp; return Guid.TryParse(g, out temp) ? temp : Guid.Empty; })
.Where(g=>g != Guid.Empty)
.ToArray();