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

C# 如何从触发的操作中获取结果,以便在包含方法中返回结果?,c#,.net,C#,.net,假设我有一个解析库,它允许在获取数据错误时传递操作(例如,在读取一行之后) 如下所示: public IEnumerable<string> Parse(string fileName) { // Initialize a parser reading the given fileName // ... myParser.Configuration.OnGettingDataError = (string error) => {

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

如下所示:

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();
     }
}
public IEnumerable解析(字符串文件名)
{
//初始化读取给定文件名的解析器
// ...
myParser.Configuration.OnGettingDataError=(字符串错误)=>
{
//显然,我们不能返回到上面的包含方法。。。
收益率返回误差;
};
while(myParser.Read())
{
返回myParser.GetRecord();
}
}
如何获得包含方法返回的错误率?
我可以在这里应用某种模式吗?

您确定要产生错误吗?但是你可以

  • 将错误存储在属性/列表中,在每次
    GetRecord
    之后枚举它
  • 对我来说,仅仅是抛出,似乎是个例外
  • 或结束枚举并检查最后一个错误
这些似乎是你唯一的选择

更新

不完全确定这是否是你想要的,但是

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();
   }
}
public IEnumerable解析(字符串文件名)
{
var errors=新列表();
myParser.Configuration.OnGettingDataError=(字符串错误)=>errors.Add(错误);
while(myParser.Read())
{
返回myParser.GetRecord();
foreach(错误中的var错误)
收益率返回误差;
错误。清除();
}
}

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

是的,我确信,在更广泛的背景下,我也认为这是一个挑战。