你能告诉我TrimNull()是否多余以及我是否应该使用替代方案?
例如:
string username = UsernameTextBox.Text.TrimNull();
我被告知没有定义或扩展方法。也许有一个我错过的参考?
更新:
如果值为NULL,返回readable
的{{1}}方式最多?
答案 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();