是否有内置的 C# 方法可以从空字符串变为空值
本文关键字:字符串 空值 内置 方法 是否 | 更新日期: 2023-09-27 18:32:01
时候我有一个输入文本,如果它是空的(例如,如果用户没有键入任何文本),我想向数据库查询发送一个空值。
我不想发送String.Empty.
(或""
)。
因此,我发现自己经常这样做:
var mySqlValue = string.IsNullOrEmpty( tbCustomerId.Text)?null:tbCustomerId.Text;
这对我来说似乎很丑陋。 .NET 为相反的情况提供了许多其他解决方案:
string.IsNullOrEmpty
string.IsNullOrWhiteSpace
myProblemVal ?? myDefultVal
C# 中是否有任何内置功能可以让我以更短的方式执行此操作,例如相反的方向?
我知道这可以通过编写我自己的扩展方法来解决,我知道该怎么做;这不是我感兴趣的解决方案。
我正在寻找一些代码,例如" if empty -> null
"。
您可以使用扩展方法:
public static class Extensions {
public static string NullIfWhiteSpace(this string value) {
if (String.IsNullOrWhiteSpace(value)) { return null; }
return value;
}
}
你可以这样使用:
var mySqlValue = tbCustomerId.Text.NullIfWhiteSpace();
我真的不知道你想象的比扩展方法更好的东西。您如何定义"更好"?短?使用特殊关键字?使用很少使用的运算符看起来很聪明?这已经只是附加到您的值的单个方法调用,它甚至适用于 null 值,并且您需要的逻辑实际上无法以比这更短的方式表达。另外,我不知道它有什么特殊的语法。
C# 中是否有任何内置功能可以让我以更短的方式执行此操作
不,尽管我认为您在问题(扩展方法)中描述的内容绝对没问题。正如您在问题中所描述的,在另一个方向上,您有零合并。
声明你自己的静态方法:
public static string NullIfEmpty(string value)
{
return string.IsNullOrEmpty(value) ? null : value;
}
行为
MyHelper.NullIfEmpty(value)
并不比调用字符串类型的静态方法更丑陋......而且它似乎比每次都写string.IsNullOrEmpty( tbCustomerId.Text)?null:tbCustomerId.Text
更干净。
这不是你直接问的吗,而是实现你正在尝试做的事情的一种方法(如果字符串的值为空,则向 SQL 传递字符串的 null 值)是使用 if 语句来检查在 SQL 查询参数分配期间传递的字符串值的长度(例如 Parameters.AddWithValue("@parameter", mySqlValue)
):
if (mySqlValue.Length > 0) {
SqlCommand.Parameters.AddWithValue("@mySqlValue", mySqlValue);
}
else {
SqlCommand.Parameters.AddWithValue("@mySqlValue", DBNull.Value);
}
其中SqlCommand
是利用参数化 SQL 查询和预先建立的 SQL 连接/连接字符串的 using
语句中的变量。
这不是一个优雅的解决方案,但它有效(并且不需要您编写扩展方法)。
如果要在反序列化 json 时自动将空字符串返回为 null:
public partial class MyClass
{
string sample;
[JsonProperty("myProperty")]
public string MyProperty
{
get { return sample; }
set { sample = string.IsNullOrEmpty(value) ? null : value; }
}
}
从字符串开始
string myString = "";
编写将空白转换为 null 的方法
public static string NullIf(string value)
{
if (String.IsNullOrWhiteSpace(value)) { return null; }
return value;
}
然后包装该方法,并使用您在 SQL 中期望的相同语法将其调回
NullIf(myString);