当字符串为null时,扩展返回DBnull

时间:2018-04-27 11:34:19

标签: c# string extension-methods

我正在尝试为C#中的字符串创建自定义扩展,请查看下面的示例,我的要求是当字符串无效时此扩展应该返回DBNull,否则它应该返回文本。这该怎么做。 My Factory.IsValidString具有所有检查以确定字符串是否有效。

public static string DBString(this string Text)
{
    return (!Factory.ISValidString(Text)) ? DBNull: Text;
}

2 个答案:

答案 0 :(得分:3)

正如 Evk 在对您帖子的评论中所说:

  

DBNullstring是不同的类型,它们没有共同点   除了object之外的父类型,因此您的扩展方法应该返回   object而非string

所以你应该重构你的扩展方法,如下所示:

public static object DBString(this string Text)
{
    return (!Factory.ISValidString(Text)) ? (object)DBNull.Value: Text;
}

请记住,您可能需要将返回的对象强制转换为stringDBNull,具体取决于使用它的代码正在执行的操作。

答案 1 :(得分:3)

不使用DBNull.Value而只使用SqlString.Null并将返回类型更改为SqlString,此处不需要强制转换,因为它存在string和{之间的隐式转换{1}}:

SqlString

此解决方案让来电者知道他正在处理的是public static SqlString DBString(this string Text) { return (!Factory.ISValidString(Text)) ? SqlString.Null : Text; } 类型,而不仅仅是SqlString类型,可能包含任何内容。