Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串拆分为GUID';s_C# - Fatal编程技术网

C# 将字符串拆分为GUID';s

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数组吗

所以

“guid1 | guid2”

然后
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();