gpt4 book ai didi

c# - Convert.ToString(str) 和 str?.ToString() 之间的区别? ""

转载 作者:太空狗 更新时间:2023-10-29 23:28:27 25 4
gpt4 key购买 nike

这两种方法有什么区别吗?

static void Main(string[] args)
{
object str = null;

string test1 = str?.ToString() ?? "";

string test2 = Convert.ToString(str);
}

编辑 1:

正如@Fabio 所指出的,我们还有第三种可能的方法:

string test3 = $"{str}";

最佳答案

因此,直接回答您的问题:任何方法之间没有区别。在 IFormatProvider 重载的情况下会有不同。

现在进入细节:

Convert.ToString 将尝试调用 IConvertibleIFormattable 接口(interface)(按此顺序),然​​后返回到基础 对象。 ToString。因此,如果您传递的内容未实现任何这些接口(interface)(或您无法在其上调用任何成员方法的 null),则此对象与简单的 对象没有区别。 ToString.

现在字符串插值是复合格式化的一种情况(字符串插值其实相当于调用了string.Format)。在回退到 object.ToString 之前,这将仅调用 IFormattable 接口(interface)实现。同样,如果某些东西没有实现接口(interface)(或 null),没有区别。

为了让事情变得更复杂,这两种方法都包含一个重载,该重载采用一个 IFormatProvider 参数。在 Convert.ToString 的情况下,如果对象实现了 IConvertible 接口(interface),该方法将尝试调用 IConvertible.ToString(IFormatProvider)。然后它会尝试 IFormattable.ToString(String, IFormatProvider),如果失败,它会回退到 object.ToString()

在复合格式的情况下,它将尝试调用 IFormatProvider.GetFormat 方法,然后使用返回的 ICustomFormatter。如果失败,它将继续 IFormattable 并最终返回到 object.ToString

当谈到 null 值时,使用 IFormatProvider 可能会有所不同。由于 Convert.ToString 尝试调用 IConvertible 实现,而您实际上不能在 null 上调用任何东西,它会将 null 作为特例并返回 string.Empty。但是,复合格式调用 ICustomFormatter.Format 并将对象作为参数,因此如果您使用以不同方式处理 nullICustomFormatter,您可以得到不同的结果!您可以使用 this code snippet 进行验证(免责声明:这不是实现 IFormatProvider 的最聪明的方法,但它可以作为示例使用)。

这是 the MSDN doc for Convert.ToString .

这是 the MSDN doc for composite formatting (请参阅处理订单部分)。

关于c# - Convert.ToString(str) 和 str?.ToString() 之间的区别? "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53477433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com