我正在尝试进行一些数据转换。不幸的是,许多数据都是字符串形式的,应该是int或double等等。
所以我得到的是这样的:
double? amount = Convert.ToDouble(strAmount);
这种方法的问题是,如果strAmount为空,如果为strAmount为空,则我希望它等于null,因此当我将其添加到数据库中时,该列将为null。所以我最终写了这个:
double? amount = null; if(strAmount.Trim().Length>0) { amount = Convert.ToDouble(strAmount); }
现在可以正常工作,但是我现在只有五行代码而不是一行。这使事情更加难以阅读,尤其是当我有大量要转换的列时。
我以为我会使用字符串类和泛型的扩展名来传递类型,这是因为它可以是double或int或long。所以我尝试了这个:
public static class GenericExtension { public static Nullable<T> ConvertToNullable<T>(this string s, T type) where T: struct { if (s.Trim().Length > 0) { return (Nullable<T>)s; } return null; } }
但是我得到一个错误:无法将类型’string’转换为’T?’
有没有解决的办法?我对使用泛型创建方法不是很熟悉。
要记住的另一件事是字符串本身可能为null。
public static Nullable<T> ToNullable<T>(this string s) where T: struct { Nullable<T> result = new Nullable<T>(); try { if (!string.IsNullOrEmpty(s) && s.Trim().Length > 0) { TypeConverter conv = TypeDescriptor.GetConverter(typeof(T)); result = (T)conv.ConvertFrom(s); } } catch { } return result; }