-
-
Notifications
You must be signed in to change notification settings - Fork 408
Closed
Description
问题描述
在使用 MiniExcel 读取 xlsx 文件并映射到模型类时,发现 double 类型的转换行为与其他类型不一致:
- 当模型属性为
double类型,但 Excel 单元格中的数据是文字时,不会抛出异常,而是直接将属性值赋为double.NaN - 当模型属性为其他类型(如
int、decimal、DateTime等),但 Excel 单元格数据无法转换时,会抛出类型转换异常
这种不一致的行为可能导致数据验证问题,因为 double.NaN 可能会被静默接受,而不是像其他类型一样明确报错。
重现步骤
1. 创建模型类:
csharp
public class TestModel
{
public double DoubleValue { get; set; }
public int IntValue { get; set; }
public decimal DecimalValue { get; set; }
}2. 准备 Excel 文件(test.xlsx):
DoubleValue | IntValue | DecimalValue -- | -- | -- 文字内容 | 文字内容 | 文字内容
3. 读取代码:
csharp
var rows = MiniExcel.Query<TestModel>("test.xlsx").ToList();实际行为
DoubleValue被赋值为double.NaN,不抛出异常IntValue和DecimalValue抛出类型转换异常
期望行为
建议保持一致的错误处理策略,有以下两种方案:
方案 1(推荐): 所有类型转换失败时都抛出异常,包括 double 类型
- 优点:可以及时发现数据问题,便于调试和数据验证
- 缺点:需要调整现有行为
方案 2: 为所有数值类型提供默认值处理(如 int 转换失败时返回 0)
- 优点:统一的容错处理
- 缺点:可能隐藏数据问题
环境信息
- MiniExcel 版本:[请填写版本号]
- .NET 版本:[请填写版本号]
- 操作系统:[请填写系统信息]
补充说明
目前的行为可能是因为 double.TryParse() 对于无法解析的文字返回 double.NaN,而其他类型(如 int.TryParse())返回 false 导致抛出异常。但从用户体验角度,这种不一致的行为容易造成困惑和潜在的 bug。
希望能统一类型转换失败时的处理逻辑。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels