假设我有一个TmpClass类,我使用该类使用LinqToExcel ExcelQueryFactory从Excel工作表返回数据。在此类中,我需要实现一些逻辑来检查数据的正确性。当我使用ExcelQueryFactory从Excel工作表中检索数据时,它返回ExcelQueryable(从IQueryalbe继承)。多个TmpClass实例可能存在验证问题-如何以集合样式处理它们?
用于Excel工作表数据映射的类
public class TmpClass
{
private string _name;
public string Name
{
set {
if (string.IsNullOrWhiteSpace(value))
{
throw new ArgumentException("Value can not be null/whitespace!");
}
_name = value;
}
}
}
使用LinqToExcel ExcelQueryFactory从Excel工作表中检索数据
..initialize ExcelQueryFactory instance, get column names, set column mapping
//retrieve data
var dataFromExcel = excel.Worksheet<TmpClass>(...worksheet name).ToList();
在读取Excel工作表行时,对于其中的某些TmpClass.Name setter函数将抛出ArgumentException-我需要一种方法来处理所有Excel工作表行:
我可以获取无效物品的集合(也许带有异常信息)吗?我可以收集有效物品吗?
最佳答案
即使您手动迭代项目,也可能很难做到。
var enumerator = excel.Worksheet<TmpClass>(...).GetEnumerator();
while (true)
{
try
{
if (!enumerator.MoveNext())
break;
// use enumerator.Current some way
}
catch
{
// you can't use enumerator.Current
}
}
由于在调用
MoveNext
时发生异常,因此无法知道可枚举中是否还有其他项。并且不能保证MoveNext
实际上已经在元素上移动了一个指针。因此,显然,最简单的方法是创建另一个类(如
TmpClass
)而没有任何业务逻辑,仅用于存储值并使用此新类。