2012-01-21 76 views
3

我最近在我的代码中遇到了一个异常,因为我正在修剪一个空字符串。 我将它替换为以下内容:这个修剪代码可能会失败吗?

SomeValue = (SomeString ?? "").Trim(); 

此代码是否会失败?

谢谢。

注:我知道我可以添加一个try/catch;我只是希望在不使用try/catch的情况下使这条线路具有防故障功能。

+0

你能写一些小的单元测试来测试吗? –

+0

我怀疑你的范围内的答案是否定的,它不会失败。正常操作失败的唯一原因是内存不足。 –

+0

它以更加怪诞的方式失败。它产生垃圾数据,你不会知道它。 –

回答

5

这不会失败(即抛出NullReferenceException),假设SomeString确实是一个string

你可以达到同样在许多方面:

SomeValue = (SomeString == null)?string.Empty:SomeString.Trim(); 
+0

好的,谢谢Oded。这是一个自定义json反序列化器的一部分,我在一个不能失败的进程中出现错误。 – frenchie

+0

@frenchie - 当你编写这样的代码时,考虑尽可能使它成为_readable_。 – Oded

+1

@Oded,我会更精确一点:'这不会失败(抛出一个NullReferenceException),因为这个代码可能会以其他方式失败。 –

2

这不是我会这样做的方式,但不是,现在不应该失败。

我可能会写一个扩展方法,在检查null之后调用trim。事情是这样的:

public static string NullTrim(this String str) { 
    if(str == null) { 
     return string.Empty; 
    } 
    return str.Trim(); 
} 

这使得所有的下列编译和执行没有错误:

"".NullTrim(); 
    " test ".NullTrim(); 
    ((string)null).NullTrim(); 
+0

好的,谢谢你的想法;目前我正在与我拥有的路线走。 – frenchie

2

那么,如果有人因为NullReferenceException失败,那么现在肯定不会失败因为的。至于其他方面,我不能说没有背景。