一尘不染

将字符串转换为可为null的类型(int,double等)

c#

我正在尝试进行一些数据转换。不幸的是,许多数据都是字符串形式的,应该是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?’

有没有解决的办法?我对使用泛型创建方法不是很熟悉。


阅读 801

收藏
2020-05-19

共1个答案

一尘不染

要记住的另一件事是字符串本身可能为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;
}
2020-05-19