假设我有一个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工作表行:
  • 对具有ArgumentException
  • 的行(记录)执行一些操作
  • ,并对具有有效数据的行执行其他一些操作。

  • 我可以获取无效物品的集合(也许带有异常信息)吗?我可以收集有效物品吗?

    最佳答案

    即使您手动迭代项目,也可能很难做到。

    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)而没有任何业务逻辑,仅用于存储值并使用此新类。

    07-24 15:47