我以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)
Arm*_*yan 12
调用Trim()空字符串将导致空字符串.调用Trim()上null会抛出NullReferenceException
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)
null在修剪之前检查字符串的一些基本技术:
(mystring ?? "").Trim()??将返回第一个操作数。只有当这个操作数为空时,才会返回第二个操作数(作为一种默认值)。如果 mystring 为空mystring?.Trim()?将用点表示法缩短一系列操作。如果操作数为空,则不会执行以下操作并返回空值。if( string.IsNullOrWhiteSpace(mystring) ) { ... }IsNullOrWhiteSpace()如果您确实想检查 mystring 中是否有真实内容,
该方法可能会替换修剪。如果操作数为空、空或只有空白字符,则返回 true。正如一些评论中所建议的,您现在可以使用具有以下语法的 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
不,这会不会是更好的初始化TheText到""。之后,您将为其分配。
不,它不会崩溃– Trim()在空字符串上可以正常工作。如果用“空”表示它可以为null,那么它将崩溃。您可以使用null条件调用将null保持为null:
string TheText =
serializer.ConvertToType<string>(dictionary["TheText"])?.Trim();
Run Code Online (Sandbox Code Playgroud)