我正在尝试为C#中的字符串创建自定义扩展,请查看下面的示例,我的要求是当字符串无效时此扩展应该返回DBNull
,否则它应该返回文本。这该怎么做。
My Factory.IsValidString
具有所有检查以确定字符串是否有效。
public static string DBString(this string Text)
{
return (!Factory.ISValidString(Text)) ? DBNull: Text;
}
答案 0 :(得分:3)
正如 Evk 在对您帖子的评论中所说:
DBNull
和string
是不同的类型,它们没有共同点 除了object之外的父类型,因此您的扩展方法应该返回object
而非string
所以你应该重构你的扩展方法,如下所示:
public static object DBString(this string Text)
{
return (!Factory.ISValidString(Text)) ? (object)DBNull.Value: Text;
}
请记住,您可能需要将返回的对象强制转换为string
或DBNull
,具体取决于使用它的代码正在执行的操作。
答案 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
类型,可能包含任何内容。