将字符串拆分为GUID数组

时间:2011-11-11 02:43:34

标签: c#

如果我有一个管道分隔列表,我可以自动将它们拆分成一个GUID数组吗?

所以

“GUID1 | GUID2”

然后Guid[] values = selectedValue.Split("|".ToCharArray());本来不错。

2 个答案:

答案 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();