c# - 如何遍历包含多个错误的字符串?
问题描述
我正在尝试为存储到validationErrors
变量中的每个错误编写日志。例如,根据我所做的,validationErrors
可能包含一条或多条错误消息。在这种情况下,如果我没有选择复选框,也没有在文本字段中输入值,我会收到以下错误:输入电话号码!并选择一个复选框。
所以我试图遍历每个日志,这样我就可以为每个错误消息创建一个单独的日志,但是当我尝试时,我只得到第一个字符。我怎样才能做到这一点?
.....
string validationErrors = string.Join(", ", ModelState.Values.Where(E => E.Errors.Count > 0)
.SelectMany(E => E.Errors)
.Select(E => E.ErrorMessage)
.ToList());
foreach (var item in validationErrors)
{
_logger.LogError(item.ToString());
}
// _logger.LogError(validationErrors); this will only write one log for both errors
throw new Exception(ValidationErrors);
这就是ModelState.Values
在创建单个字符串之前循环记录每个错误的意思吗?
foreach (var item in ModelState.Values)
{
_logger.LogError(item.Errors.Select(E => E.ErrorMessage));
}
解决方案
循环遍历字符串本身会将字符串视为 an char[]
,因此您可以单独遍历每个字符。
要遍历包含多个值的字符串,您需要先将其拆分为多个字符串。您可以使用它string.Split
来执行此操作。https://docs.microsoft.com/en-us/dotnet/csharp/how-to/parse-strings-using-split
foreach(var validationError in validationErrors.Split(','))
{
// Do stuff.
}
在您发布的用例中,值首先合并。这一步可以跳过。
var validationErrors = ModelState.Values.Where(E => E.Errors.Count > 0)
.SelectMany(E => E.Errors)
.Select(E => E.ErrorMessage)
.ToList();
foreach(var validationError in validationErrors)
{
// Do stuff.
}
推荐阅读
- amazon-web-services - Concourse .yml 文件 aws 凭据
- handlebars.js - 根据 Ghost 中的上下文包含车把部分
- python - 在 ubuntu 服务器上安装 flask_swagger_ui 时出错
- c# - 在 Visual Studio 中单击 WPF .NET Framework 应用程序中的按钮时,如何使标签不可见/可见
- python - WTForm validate_on_submit() 为 selectField 返回 False
- python - 当互联网连接关闭时,如何使用 QMessageBox 只提供一次信息?
- asp.net-core - 如果缓存已满,则使用相同键第二次调用 MemoryCache.Set() 会擦除条目
- python - 多线程 python 代码不能有效利用 CPU
- javascript - D3.js:如何给与网格线相同样式的网格的顶部和右侧线提供相同的样式?
- java - 将 java web 应用程序部署到 heroku:“找不到或加载主类”