在C# 6.0中,添加了字符串插值。
string myString = $"Value is {someValue}";
在上面的示例中,如何处理空值?(如果someValue
为null)
编辑:仅澄清一下,我已经测试并知道它没有失败,这个问题是为了确定是否有任何需要注意的情况,在使用字符串插值之前必须检查空值。
string myString = $"Value is {someValue}";
在上面的示例中,如何处理空值?(如果someValue
为null)
编辑:仅澄清一下,我已经测试并知道它没有失败,这个问题是为了确定是否有任何需要注意的情况,在使用字符串插值之前必须检查空值。
这就和string.Format("Value is {0}", someValue)
一样,它会检查是否为null
引用并替换为空字符串。但是,如果你像这样传递null
:string.Format("Value is {0}", null)
,它将抛出异常。然而,在$"Value is {null}"
的情况下,那个null
首先被设置为一个参数,不会抛出异常。
null
作为args
参数传递本身而不是空元素,则会抛出异常。 - James ThorpeConsole.WriteLine("{0}", null);
,它会忽略 null
。我以为它只是将所有内容传递给 string.Format
。 - juharr+
运算符,C# 编译器会在内部将其转换为 String.Concat
静态方法,并且在处理 null
值时仍然表现得像 string.Empty
。 - Soner Gönül看起来行为取决于调用哪些底层格式化方法,而且这些实现可能会随时间而改变。如果您将null格式化为字符串,例如“(null)”,则不确定在未来几年内是否仍然保持不变。在某些新版本的.NET中,它可能开始抛出异常。
因此,我认为最安全的方法是制定一些条件以避免使用null。编写一个简单的三元运算符,如:
int? someValue = 5;
var valueStr = (someValue is not null) ? someValue.ToString() : string.Empty;
var myString = $"Value is {valueStr}";
这是一行额外的代码,但至少行为是可控的。