我正在try 进行一些数据转换.不幸的是,很多数据都在字符串中,其中应该是整型或双精度型,依此类推……

所以我得到的是:

double? amount = Convert.ToDouble(strAmount);

这种方法的问题是,如果strAmount为空,如果它为空,我希望它的值为null,因此当我将其添加到数据库中时,列将为null.所以我最后写了这样一篇:

double? amount = null;
if(strAmount.Trim().Length>0)
{
    amount = Convert.ToDouble(strAmount);
}

现在这很好,但我现在有五行代码,而不是一行.这使得阅读起来有点困难,尤其是当我有大量的列要转换时.

我想我应该使用string类和泛型的扩展来传递类型,这是因为它可以是double、int或long.所以我try 了这个:

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"

有办法吗?我不太熟悉使用泛型创建方法.

推荐答案

要记住的另一件事是,字符串本身可能是空的.

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;
}

.net相关问答推荐

无法在Designer、VS2022、. NET 8中打开WinForms表单'

为什么这个同步运行的异步睡眠会挂起?

PowerShell - 如果用户输入凭据,则查询 AD 时出错

如何知道变量是否只是指向另一个对象的pointer或者它是否可以独立存在

使属性只能通过绑定的 Editor(component) 编辑

C# 中的批量更新

在 C# 中生成随机小数

无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 1.1.0.0

使用字典作为数据源绑定组合框

单击关闭按钮时隐藏表单而不是关闭

将笔画应用于 WPF 中的文本块

如何在 C# 中打开 Excel 文件?

如何将枚举值序列化为 int?

双倍的? = 双倍? + 双倍?

自定义属性的构造函数何时运行?

将 StreamReader 返回到开头

如何在多个解决方案之间共享相同的 Resharper 设置,无需人工干预?

.Net 正则表达式:单词字符 \w 是什么?

obj 文件夹是为了什么而生成的?

将控制台输出镜像到文件