.net 是否有内置的C#方法可以从空字符串转换为空值?

wh6knrhe  于 2023-01-22  发布在  .NET
关注(0)|答案(6)|浏览(142)

很多时候,我有一个输入文本,如果它是空的(例如,如果用户没有键入任何文本),我想向DB查询发送一个空值。
想发送String.Empty.(或"")。
因此,我发现自己经常这样做:

var mySqlValue =  string.IsNullOrEmpty( tbCustomerId.Text)?null:tbCustomerId.Text;

这在我看来很难理解。.NET为相反的场景提供了许多其他解决方案:

string.IsNullOrEmpty
string.IsNullOrWhiteSpace
myProblemVal ?? myDefultVal

C#中有没有内置的东西可以让我用更短的方式来做这件事,比如相反的方向?

我知道这可以通过编写自己的扩展方法来解决,我知道如何做到这一点;这不是我感兴趣的解决方案。

我在找类似“if empty -> null“的代码。

6pp0gazn

6pp0gazn1#

您可以使用一种延伸方法:

public static class Extensions {
    public static string NullIfWhiteSpace(this string value) {
        if (String.IsNullOrWhiteSpace(value)) { return null; }
        return value;
    }
}

你可以这样使用:

var mySqlValue = tbCustomerId.Text.NullIfWhiteSpace();

我真的不知道你对比Extension方法更好的东西有什么想法。你如何定义“更好”?更短?使用特殊的关键字?使用很少使用的运算符来显得聪明?这已经只是一个附加到你的值的方法调用,甚至可以在空值上工作,你需要的逻辑真的不能用比这更短的方式来表达。而且,我不知道它有什么特殊的语法。

bvjveswy

bvjveswy2#

C#中是否有内置的东西可以让我以更短的方式完成此操作
不,尽管我认为你在问题中描述的(扩展方法)绝对是好的,正如你在问题中描述的,在另一个方向上你有空合并。

8oomwypt

8oomwypt3#

声明您自己的静态方法:

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


MyHelper.NullIfEmpty(value)并不比调用字符串类型的静态方法更丑陋...而且似乎比每次都写string.IsNullOrEmpty( tbCustomerId.Text)?null:tbCustomerId.Text更干净。

h6my8fg2

h6my8fg24#

从字符串开始

string myString = "";

编写一个将空转换为空的方法

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

然后 Package 该方法,并使用与SQL中相同的语法回调它

NullIf(myString);
ulmd4ohb

ulmd4ohb5#

这不是你直接问的问题,而是实现你试图做的事情(如果字符串的值为空,则将空值传递给SQL)的一种方法,即使用if语句检查在SQL查询参数赋值期间传递的字符串值的长度(例如Parameters.AddWithValue("@parameter", mySqlValue)):

if (mySqlValue.Length > 0) {
    SqlCommand.Parameters.AddWithValue("@mySqlValue", mySqlValue);
}
else {
    SqlCommand.Parameters.AddWithValue("@mySqlValue", DBNull.Value);
}

其中SqlCommandusing语句中的变量,该语句使用参数化SQL查询和预先建立的SQL连接/连接字符串。
这不是一个优雅的解决方案,但它可以工作(并且不需要编写扩展方法)。

nkoocmlb

nkoocmlb6#

如果您希望在反序列化json时自动将空字符串返回为null:

public partial class MyClass
{
    string sample;
    [JsonProperty("myProperty")]
    public string MyProperty
    {
        get { return sample; }
        set { sample = string.IsNullOrEmpty(value) ? null : value; }
    }
}

相关问题