当string为空或null时.Trim()

fre*_*hie 16 c#

我以json的形式从客户端收到一些数据.我写的是这样的:

string TheText; // or whould it be better string TheText = ""; ?
TheText = ((serializer.ConvertToType<string>(dictionary["TheText"])).Trim());
Run Code Online (Sandbox Code Playgroud)

如果从json解析的变量返回空,那么当我调用.Trim()方法时,这段代码会崩溃吗?

谢谢.

Ode*_*ded 22

如果序列化程序返回一个空字符串,Trim则不执行任何操作.

如果序列化程序返回null,您将收到一个NullReferenceException电话Trim.

您的代码编写得更好(就初始化而言),如下所示:

string theText = 
            ((serializer.ConvertToType<string>(dictionary["TheText"])).Trim());
Run Code Online (Sandbox Code Playgroud)

声明和初始化变量并立即分配给它是没有意义的.

如果您不知道序列化程序可能返回的内容,则以下内容最安全:

string theText = ((serializer.ConvertToType<string>(dictionary["TheText"])));

if(!string.IsNullOrEmpty(theText))
{
    theText = theText.Trim();
}
Run Code Online (Sandbox Code Playgroud)


TcK*_*cKs 15

您可以使用elvis运算符:

GetNullableString()?.Trim(); // returns NULL or trimmed string
Run Code Online (Sandbox Code Playgroud)

  • https://en.wikipedia.org/wiki/Elvis_operator 对于那些不知道 Elvis 含义的人?: (3认同)
  • 在C#中,它称为空条件运算符:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/null-conditional-operators (3认同)

Arm*_*yan 12

调用Trim()空字符串将导致空字符串.调用Trim()null会抛出NullReferenceException

  • 啊哈 - [String.IsNullOrWhiteSpace](http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx) (4认同)

Jso*_*ham 11

如果您希望修剪一些字段,但是对于那些在某些字段中具有空值的记录获得例外,则编写快速扩展方法将是最简单的方法:

public static class ExtensionMethods
    {
        public static string TrimIfNotNull(this string value)
        {
            if (value != null)
            {
                return value.Trim();
            }
            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用示例:

string concatenated = String.Format("{0} {1} {2}", myObject.fieldOne.TrimIfNotNull(), myObject.fieldTwo.TrimIfNotNull(), myObject.fieldThree.TrimIfNotNull());
Run Code Online (Sandbox Code Playgroud)


Jps*_*psy 8

null在修剪之前检查字符串的一些基本技术:

  • (mystring ?? "").Trim()
    “空合并运算符”??将返回第一个操作数。只有当这个操作数为空时,才会返回第二个操作数(作为一种默认值)。如果 mystring 为空
    ,上面的示例将返回一个空字符串
  • mystring?.Trim()
    “空条件运算符”?将用点表示法缩短一系列操作。如果操作数为空,则不会执行以下操作并返回空值。
    上面的例子将返回空值,如果MyString中为空。
  • if( string.IsNullOrWhiteSpace(mystring) ) { ... }
    IsNullOrWhiteSpace()如果您确实想检查 mystring 中是否有真实内容, 该方法可能会替换修剪。如果操作数为空、空或只有空白字符,则返回 true。


sha*_*bus 6

正如一些评论中所建议的,您现在可以使用具有以下语法的 c# 6 Null 条件运算符:

string TheText = (serializer.ConvertToType<string>(dictionary["TheText"]))?.Trim();
Run Code Online (Sandbox Code Playgroud)

文档:https : //msdn.microsoft.com/en-us/library/dn986595.aspx


Ry-*_*Ry- 5

  • 不,这会不会是更好的初始化TheText""。之后,您将为其分配。

  • 不,它不会崩溃– Trim()在空字符串上可以正常工作。如果用“空”表示它可以为null,那么它将崩溃。您可以使用null条件调用将null保持为null:

    string TheText =
        serializer.ConvertToType<string>(dictionary["TheText"])?.Trim();
    
    Run Code Online (Sandbox Code Playgroud)