繁体   English   中英

是否有内置的 C# 方法将 go 从空字符串转换为 null 值?

[英]Is there a built-in C# method to go from an empty string to null value?

有很多次我有一个输入文本,如果它是空的(例如,如果用户没有输入任何文本),我想向数据库查询发送一个 null 值。

不想发送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();

我真的不知道你想象的东西比扩展方法更好。 你如何定义“更好”? 短? 使用特殊关键字? 使用很少使用的运算符看起来很聪明? 这已经只是附加到您的值的单个方法调用,它甚至可以在空值上工作,并且您所需的逻辑无法以比此更短的方式表达。 另外,我不知道它的任何特殊语法。

但有什么更好的吗?

不,虽然我认为你在问题中描述的内容(扩展方法)绝对没问题。 正如您在问题中描述的那样,在另一个方向上,您具有无效合并。

声明自己的静态方法:

public static string NullIfEmpty(string value)
{
  return string.IsNullOrEmpty(value) ? null : value;
}

MyHelper.NullIfEmpty(value)并不比调用字符串类型的静态方法更糟糕......而且它似乎比每次写入“string.IsNullOrEmpty(tbCustomerId.Text)?null:tbCustomerId.Text”更清晰。

从你的字符串开始

string myString = "";

编写一个将blank转换为null的方法

public static string NullIf(string value)
{
    if (String.IsNullOrWhiteSpace(value)) { return null; }
    return value;
}

然后在方法中包装并使用您在SQL中期望的相同语法将其回调

NullIf(myString);

这不是您直接询问的,而是实现您想要做的事情的一种方法(如果字符串的值为空,则将空值传递给 SQL 以获取字符串)是使用 if 语句来检查字符串值的长度在 SQL Query 参数分配期间传递(例如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; }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM