C# 将字符串拆分为GUID';s
如果我有一个管道分隔列表,我可以将它们自动拆分为GUID数组吗 所以 “guid1 | guid2” 然后C# 将字符串拆分为GUID';s,c#,C#,如果我有一个管道分隔列表,我可以将它们自动拆分为GUID数组吗 所以 “guid1 | guid2” 然后Guid[]values=selectedValue.Split(“|”。.tocharray())会很好。几乎: Guid[] values = selectedValue.Split('|').Select(s => Guid.Parse(s)).ToArray(); 如果任何guid无效,这将抛出FormatException 如果你想忽略它们,你可以按照Jeremy在评论中的
Guid[]values=selectedValue.Split(“|”。.tocharray())代码>会很好。几乎:
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%的过早优化并不重要。为了避免双重解析,我将其“重新表述”为:
将其拆分为字符串数组。现在您只需要将字符串数组转换为guid数组。不要害羞;这只是编程。@RaymondChen,是的,我意识到了这一点,但我认为可能有一种更优雅的方式,LINQ似乎很适合这一要求。可能是。其中(s=>Guid.TryParse(s,out foo))
某种类型的东西可能被钉在里面。您可以使用SelectMany
避免双重解析s.Split(“|”)。选择many(s=>{Guid g;return Guid.TryParse(s,out g)?new Guid[]{g}:new Guid[]{};}.ToArray()
。如果其中一个Guid为空9FE027E0-CF95-492F-821C-3F2EC9472657 00000000-0000-0000-000000000000 | D94DF6DB-85C1-4312-9702-FB03A731A2B1,这将不起作用
"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();