通过考虑NULL修剪文本框值

时间:2012-04-11 13:33:22

标签: c# asp.net .net visual-studio

你能告诉我TrimNull()是否多余以及我是否应该使用替代方案?

例如:

string username = UsernameTextBox.Text.TrimNull();

我被告知没有定义或扩展方法。也许有一个我错过的参考?

更新

如果值为NULL,返回readable的{​​{1}}方式最多?

5 个答案:

答案 0 :(得分:5)

没有TrimNull(String)这样的功能 - 它不会做任何事情。字符串是null或非null,它不能包含两者的混合。如果字符串为null,则静态函数TrimNull(myString)将无法从字符串中“删除”任何内容。如果它不为null,则不会删除NULL。更糟糕的是,如果TrimNull是一个实例方法,myString.TrimNull()只会在myString为NULL时导致异常 - 因为你无法在空引用上调用任何方法。

  • 如果您的目标是修剪字符串周围的空白字符,请使用myString.Trim()

  • 如果您的目标是检测字符串是否为空,请使用myString == NULL

  • 如果您的目标是检测字符串是空还是空,请使用String.IsNullOrEmpty(myString)

  • 如果您的目标是从数据流中修剪尾随空字符(\0),请尝试以下操作:

    myString.TrimEnd(new char[] { '\0' } )

但正如FrédéricHamidi所说,如果您指的是后者,那么用户将很难将空字符添加到TextBox中,因此您在处理输入时不必担心这种情况。

答案 1 :(得分:2)

我通常使用String.IsNullOrWhiteSpace(),如下所示:

string username = (String.IsNullOrWhiteSpace(UsernameTextBox.Text) ? 
    null : UsernameTextBox.Text.Trim());

这样,如果.Text属性为null,则不会导致异常。

答案 2 :(得分:1)

如果您愿意,可以为此创建自己的扩展方法:

public static class StringExtensions
{
    public static string TrimNull(this string value)
    {
        return string.IsNullOrWhiteSpace(value) ? value : value.Trim();
    }
}

将此项添加到您的项目中,您的代码就可以运行。

这只是另一种选择。

答案 3 :(得分:1)

使用null-coalescing operator中的@sixlettervariables答案中提到的Negate the null-coalescing operator

string username = (UsernameTextBox.Text ?? String.Empty).Trim();

答案 4 :(得分:0)

字符串为NULL不是它的值。它是一个国家。这意味着它没有被分配一个内存(因为它是一个引用类型)。如果它是一个值类型数据类型,它将自动分配一个默认值,就像它的0一样,依此类推

你应该使用

if(!String.IsNullOrEmpty(UsernameTextBox.Text))
    string username = UsernameTextBox.Text.Trim();