如果我有一个用管道符分隔的列表,我能否自动将它们拆分成GUID数组?
比如:
"guid1|guid2"
然后使用Guid[] values = selectedValue.Split("|".ToCharArray());
就可以了。
如果我有一个用管道符分隔的列表,我能否自动将它们拆分成GUID数组?
比如:
"guid1|guid2"
然后使用Guid[] values = selectedValue.Split("|".ToCharArray());
就可以了。
几乎:
Guid[] values = selectedValue.Split('|').Select(s => Guid.Parse(s)).ToArray();
如果任何一个 Guid 不是有效的,这将抛出一个 FormatException 异常。
如果您想忽略它们,您可以按照 Jeremy 在评论中提出的建议进行操作:
"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%的早期优化并不重要。
.Where(s=>Guid.TryParse(s, out foo))
。 - Jeremy HolovacsSelectMany
来避免双重解析。 s.Split('|') .SelectMany(s => { Guid g; return Guid.TryParse(s, out g) ? new Guid[] { g } : new Guid[] { }; }) .ToArray()
。 - Raymond Chen"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();