28

有很多次我有一个输入文本,

如果它是空的(用户没有输入任何文本) - 我想发送到数据库查询“null”

不是 String.Empty.(或“”)

所以我发现自己经常这样做:

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

这对我来说似乎很难看。

.net 为相反的场景提供了许多其他解决方案:

        string.IsNullOrEmpty
        string.IsNullOrWhiteSpace
        myProblemVal ?? myDefultVal

我知道这可以通过扩展方法解决 - 我知道该怎么做..

但有什么更好的吗?

是否有任何智能代码:“ if its empty -> null”。

4

4 回答 4

28

您可以使用扩展方法:

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

你可以这样使用:

var mySqlValue = tbCustomerId.Text.NullIfWhiteSpace();

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

于 2012-04-24T09:19:09.263 回答
8

声明你自己的静态方法:

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

正在做

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

于 2012-04-24T09:20:17.417 回答
8

但有什么更好的吗?

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

于 2012-04-24T09:21:13.137 回答
1

从你的字符串开始

string myString = "";

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

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

然后包装该方法并使用您在 SQL 中所期望的相同语法调用它

NullIf(myString);
于 2018-11-20T22:47:53.793 回答