gpt4 book ai didi

c# - 将 out 修饰符的值返回到 C# 中的集合

转载 作者:行者123 更新时间:2023-12-02 13:40:54 25 4
gpt4 key购买 nike

假设我收到了来自用户的字符串集合。我需要将它们转换为 GUID 序列以进行进一步处理。用户有可能输入无效数据(不正确的 GUID 序列),因此我需要验证输入。此外,如果所有上传的数据都是正确的 GUID 值,我就可以运行业务流程。这是我的代码:

IEnumerable<string> userUploadedValues = /* some logic */;
bool canParseUserInputToGuid = userUploadedValues.All(p => Guid.TryParse(p, out var x));
if(canParseUserInputToGuid)
var parsedUserInput = userUploadedValues.Select(p=> Guid.Parse(p));

这个逻辑工作得很好,但我不喜欢它,因为实际上我做了两次工作。在第二行中,Guid.TryParse(p, out var x) 已经将解析的 GUID 序列写入 X 变量。是否有一种方法可以组合验证和映射逻辑 - 如果序列元素满足条件(All),则在一个查询中将此元素映射到新集合(Select)?就性能而言,这对我来说也很重要,因为客户端可能会发送大量数据(1, 000, 000+元素),并且在这里做两次工作效率有点低。

最佳答案

您可以在一个Select中执行类似的操作:

var parsedUserInput = userUploadedValues.Select(p => Guid.TryParse(p, out var x) ? x : default)
.Where(p => p != default);

对于这一点,您需要确定用户是否没有 Guid.Empty 输入。

否则,如果解析不成功,您可以返回可为空的 Guid:

var parsedUserInput = userUploadedValues.Select(p => Guid.TryParse(p, out var x) ? x : default(Guid?))
.Where(p => p != null);

另一种解决方案是创建扩展方法,例如:

public static class MyExtensions
{
public static Guid? ToGuid(this string arg)
{
Guid? result = null;
if(Guid.TryParse(arg, out Guid guid))
result = guid;
return result;
}
}

和用法:

var parsedUserInput2 = userUploadedValues.Select(p => p.ToGuid())
.Where(p => p != null);

但请记住,在这种情况下,您将拥有可为 null 的 Guid 的集合。

关于c# - 将 out 修饰符的值返回到 C# 中的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56732148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com