首页 > 解决方案 > 如何遍历包含多个错误的字符串?

问题描述

我正在尝试为存储到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));
                    }

标签: c#asp.net-mvc

解决方案


循环遍历字符串本身会将字符串视为 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.
}

推荐阅读