是否有内置的 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 "。

是否有内置的 C# 方法可以从空字符串变为空值

您可以使用扩展方法:

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