gpt4 book ai didi

c# - 在循环中尝试Catch ArgumentNullException,记录并继续

转载 作者:行者123 更新时间:2023-12-03 07:54:18 27 4
gpt4 key购买 nike

我有一个简单的方法,该方法从Web服务获取人员信息,并使用StringBuilder构建格式化的字符串。

public List<string> Process(data)
{
List<string> returnVal = new List<string>();
foreach (var entry in AggregrateRecords(data))
{
try
{
var personEntry = FormatRepository.FormatForSB(entry);
personResult.Append(posgresEntry);
personResult.Append(";");
personResult.Append(Environment.NewLine);
}
catch (Exception ex)
{
_logger.Error("String for entry failed.", ex);
}
}
returnVal.Add(personResult.ToString());
}

public static string FormatForSB(PersonEntry entry)
{
StringBuilder sb = new StringBuilder();
try
{
Func<string, int, string> truncateFunc =
(val, length) => !string.IsNullOrEmpty(val) && val.Length > length ? val.Substring(0, length) : val;
sb.AppendFormat("{0,-13}", truncateFunc(entry.City, 13));
sb.AppendFormat("{0,-2}", truncateFunc(entry.State, 2));
sb.AppendFormat("{0,-5}", truncateFunc(entry.Zip, 5));
sb.AppendFormat("{0,-1}", truncateFunc(Regex.Replace(entry.HomePhone, @"[^\d]", ""), 10));
} catch (ArgumentNullException ex) {
ex.Data.Add("Entry", entry.ID);
throw ex;
}
return sb.ToString();
}
}

可能会发生Zip或Gender条目返回null的情况。这表明基础数据存在问题,但不应该成为显示障碍。我想传递失败的条目的记录ID,但我想继续。这不是在做。 NullException被捕获,但是返回sb.ToString()仍然导致失败。我这里需要什么?我已经看过“最终”和“继续”,但最终得到了无法访问的代码。
我该如何放弃未生成的字符串,在调用方法中记录失败并继续进行下一个输入?

最佳答案

如果您希望得到空值,那么这不是异常(exception)情况。对于可以获取null的字段,您需要检查null并将其替换为空字符串或其他一些数据。

例如,您的truncateFunc可以隐式地或基于传递给它的参数轻松地处理null情况。

同样,除了抛出异常之外,您还应该将其添加到错误集合中,可以在循环完成之后对其进行检查。这也不是异常(exception)情况,而是将数据问题收集到某种数组中的一种标准方法。如果您希望以这种方式完成循环,则可以抛出一个示例,恕我直言。

关于c# - 在循环中尝试Catch ArgumentNullException,记录并继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29188022/

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