c# - 如何从触发的操作中获取结果,以便在包含方法中返回它?

标签 c# .net

假设我有一个解析库,它允许在获取数据错误时传递一个操作(例如,在读取一行后)。

类似下面的内容:

public IEnumerable<string> Parse(string fileName)
{
     // Initialize a parser reading the given fileName
     // ...
     myParser.Configuration.OnGettingDataError = (string error) => 
     {
          // Obviously we cannot yield return to the containing method above...
          yield return error;
     };
     while(myParser.Read())
     {
         yield return myParser.GetRecord();
     }
}

如何获得包含方法返回的错误率? 我可以在这里应用某种模式吗?

最佳答案

您确定要产生错误吗?不过你可以

  • 将错误存储在属性/列表中,并在每次 GetRecord 之后枚举它。
  • 只是,对我来说似乎很异常(exception)
  • 或者结束枚举并检查最后一个错误。

这些似乎是您唯一的选择

更新

不完全确定这是否是您所追求的,但是......

public IEnumerable<string> Parse(string fileName)
{
   var errors = new List<string>();
   myParser.Configuration.OnGettingDataError = (string error) => errors.Add(error);

   while (myParser.Read())
   {
      yield return myParser.GetRecord();
      foreach(var error in errors)
         yield return error;
      errors.Clear();
   }
}

注意:完全未经测试,并且有点可疑

关于c# - 如何从触发的操作中获取结果,以便在包含方法中返回它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52905869/

相关文章:

c# - 多线程批处理队列

c# - 更有效地构建树?

c# - Mono 是否支持 64 位 Windows?

.net - 低级鼠标钩子(Hook)和 DirectX

c# - 声明 IEnumerable<T> 变量以供稍后使用

c# - 在 C# 中使用 SQL 参数来 DROP INDEX

c# - 如何创建临时文件来缓存库的启动工作?

c# - 使用 Selenium WebDriver C# 从下拉列表中选择一个值

.net - 如何在 Azure Function 应用程序中的所有函数中添加点网依赖项

.net - 如何在.net框架4.0中压缩文件夹