使用tiny csv helper解析csv时如何将float自动转换为int32
Tiny CSV Helper float 转 int32 映射实现方案
完全可以实现该需求,你可以通过自定义类型转换器的方式处理,逻辑和你当前用的DateTimeConverter一致。
实现思路
- 自定义实现
ITypeConverter接口的转换器,内部先把123456.00这类字符串解析为浮点类型,再安全转换为int32即可,还可以根据自己的业务需求添加空值处理、范围校验等容错逻辑。 - 属性映射时直接传入自定义转换器实例即可,用法和
DateTimeConverter完全相同。
完整代码示例
1. 自定义转换器实现
public class FloatToInt32Converter : ITypeConverter { public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData) { // 空值处理逻辑可根据业务需求调整 if (string.IsNullOrWhiteSpace(text)) return default(int); if (double.TryParse(text, out var doubleValue)) { // 可选添加int32范围校验,避免溢出 if (doubleValue >= int.MinValue && doubleValue <= int.MaxValue) { return Convert.ToInt32(doubleValue); } throw new InvalidCastException($"数值 {doubleValue} 超出int32可表示范围"); } throw new InvalidCastException($"无法将字符串 {text} 转换为有效int32数值"); } public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData) { // 写入CSV时的转换逻辑,不需要可直接返回字符串 return value?.ToString() ?? string.Empty; } }
2. 映射用法
// 假设csv第1列对应实体的Count属性,类型为int MapProperty(1, x => x.Count, new FloatToInt32Converter());
内容的提问来源于stack exchange,提问作者Fardin
相关产品推荐
相关产品推荐

