Разделить строку на массив GUID

Если у меня есть список, разделенный на трубы, я могу разбить их автоматически на массив GUID?

So

"guid1 | guid2"

а затем Guid[] values = selectedValue.Split("|".ToCharArray()); было бы хорошо.

Ответ 1

Почти:

Guid[] values = selectedValue.Split('|').Select(s => Guid.Parse(s)).ToArray();

Если какой-либо из Гидов недействителен, это приведет к исключению 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% преждевременные оптимизации, которые не имеют значения.

Ответ 2

Чтобы избежать двойного разбора, я бы "перефразировал" его как:

"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();