假设我有一个解析库,它允许在获取数据错误时传递一个操作(例如,在读取一行后)。
类似下面的内容:
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/