当string为空或null时.Trim()

时间:2011-12-18 20:46:00

标签: c#

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

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

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

感谢。

9 个答案:

答案 0 :(得分:20)

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

如果序列化程序返回null,您将在NullReferenceException的通话中获得Trim

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

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

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

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

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

if(!string.IsNullOrEmpty(theText))
{
    theText = theText.Trim();
}

答案 1 :(得分:12)

在空字符串上调用Trim()将导致空字符串。在Trim()上拨打null会抛出NullReferenceException

答案 2 :(得分:9)

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

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

使用示例:

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

答案 3 :(得分:9)

您可以使用elvis运算符:

GetNullableString()?.Trim(); // returns NULL or trimmed string

答案 4 :(得分:5)

  • 不,将<{1}}初始化为TheText 更好。你之后就分配了它。

  • 不,它不会崩溃 - ""在空字符串上运行正常。如果“空”意味着它可以为空,那么是的,它会崩溃;你可以使用null条件调用将null保持为null:

    Trim()

答案 5 :(得分:3)

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

    onDrop: function(table, row) {
        doWork(table, row)
    }

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

答案 6 :(得分:3)

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

  • (mystring ?? "").Trim()
    “空合并运算符” ??将返回第一个操作数。仅当此操作数为null时,才会返回第二个操作数(作为一种默认值)。
    如果mystring为null,则上面的示例将返回空字符串
  • mystring?.Trim()
    “空条件运算符” ?将简化点表示形式的一系列操作。如果操作数为null,则将不执行以下操作,并且将返回null。
    如果mystring为null,则上面的示例将返回 null
  • if( string.IsNullOrWhiteSpace(mystring) ) { ... }
    如果您实际上想检查mystring中是否包含真实内容,则IsNullOrWhiteSpace()方法可以代替修整。如果操作数为null,空或除空白字符外什么都不返回,则返回true。

答案 7 :(得分:0)

您可以将此代码用作beblow

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

答案 8 :(得分:0)

您可以使用trim中的空安全运算符org.apache.commons.lang StringUtils.trim(stringOrNull)