C# 这个修剪代码会失败吗?
我最近在代码中遇到了一个异常,因为我正在修剪一个空字符串。 我将其替换为以下内容:C# 这个修剪代码会失败吗?,c#,C#,我最近在代码中遇到了一个异常,因为我正在修剪一个空字符串。 我将其替换为以下内容: SomeValue = (SomeString ?? "").Trim(); 这个代码会失败吗 谢谢 注意:我知道我可以添加一个try/catch;我只是想在不使用try/catch的情况下,使这条线路不出现故障。这不是我应该采用的方式,但不,现在不应该失败 我可能会编写一个扩展方法,在检查null后调用trim。大概是这样的: public static string NullTrim(this Stri
SomeValue = (SomeString ?? "").Trim();
这个代码会失败吗
谢谢
注意:我知道我可以添加一个try/catch;我只是想在不使用try/catch的情况下,使这条线路不出现故障。这不是我应该采用的方式,但不,现在不应该失败 我可能会编写一个扩展方法,在检查null后调用trim。大概是这样的:
public static string NullTrim(this String str) {
if(str == null) {
return string.Empty;
}
return str.Trim();
}
这允许编译和执行以下所有内容而不会出错:
"".NullTrim();
" test ".NullTrim();
((string)null).NullTrim();
假设SomeString
确实是字符串,则此操作不会失败(即抛出NullReferenceException
)
您可以通过多种方式实现相同的目标:
SomeValue = (SomeString == null)?string.Empty:SomeString.Trim();
如果它因为NullReferenceException
而失败,那么现在它肯定不会因为而失败。至于其余的,我不能说没有上下文。你能写一些小单元测试来测试吗?我怀疑你范围内的答案是否定的,它不会失败。它在正常运行中失败的唯一原因是内存不足。它以一种更奇怪的方式失败。它会产生垃圾数据,你不会知道。真正的错误不是你对空字符串调用Trim(),而是你忘记初始化字符串。这个bug现在将被隐藏起来,在程序的完全不同的部分生成错误的输出。好的,谢谢Oded。这是自定义json反序列化程序的一部分,我在一个不能失败的过程中遇到了一个错误。@frenchie-当您编写这样的代码时,请考虑使其尽可能可读。@Oded,我会更精确一点:这不会失败(抛出NullReferenceException)
因为此代码可能以其他方式失败。@DarinDimitrov-公平点。。。当然,OutOfMemoryException
总是可能发生的。@frenchie,在Azure上,您将获得System.OutOfCreditException
,然后再获得System.OutOfMemoryException
:-)好的,谢谢您的想法;目前,我将继续我的路线。