F#Excel类型提供程序在读取空单元格时引发System.InvalidCastException

F#Excel类型提供程序在读取空单元格时引发System.InvalidCastException,f#,type-providers,F#,Type Providers,我用的是F。我从文档中获取的小示例代码在我有一个空单元格之前可以正常工作 let valueA = row.ColumnA 然后抛出System.InvalidCastException 发生类型为“System.InvalidCastException”的未处理异常 在sample.exe中 其他信息:无法强制转换“System.DBNull”类型的对象 键入“System.String” 我已使用此代码修复了此问题: let mutable valueA = Unchecked.defau

我用的是F。我从文档中获取的小示例代码在我有一个空单元格之前可以正常工作

let valueA = row.ColumnA
然后抛出
System.InvalidCastException

发生类型为“System.InvalidCastException”的未处理异常 在sample.exe中

其他信息:无法强制转换“System.DBNull”类型的对象 键入“System.String”

我已使用此代码修复了此问题:

let mutable valueA = Unchecked.defaultof<string>
    try
        valueA <- row.ColumnA
    with ex -> 
        valueA <- String.Empty
编辑:作为F#的新手,我似乎误解了发生的事情,Excel类型提供程序没有返回DbNull,它实际上抛出了异常。因此,这确实解决了问题:

let getString func =  
     try
        func()
     with ex -> 
        String.Empty
let valueA = getString (fun() -> row.ColumnA)

我想我现在的问题是,类型提供程序是否应该重新调整选项类型,这样它就可以在不引发异常的情况下处理缺少的值?还是我仍然缺少一些东西,还有另一种更优雅的处理方法?

似乎这实际上是类型提供程序中的一个错误,并且它已在最新版本中修复。当从完全有效的excel文件返回数据时,它不应该抛出异常,它现在返回的是
null

查看您链接的示例,似乎
是预期的行为(但我没有使用该库,因此可能有办法让它返回选项)
let getString func =  
     try
        func()
     with ex -> 
        String.Empty
let valueA = getString (fun() -> row.ColumnA)