在 String.Format() 中显式转换 int 的原因是什么?

本文关键字:是什么 int 显式转换 Format String | 更新日期: 2023-09-27 17:55:22

在我遇到的大多数代码中,它们在使用 String.Format() 时显式地将 int 或其他数字转换为字符串,尽管据我所知,这不是必需的。我是否缺少一些东西,需要在将其用作字符串之前将数字显式转换为字符串?

明确:

int i = 13;
string example = String.Format("If a Friday lands on the {0}th of the month, it is generally considered to be an unlucky day!",
                               i.ToString());

产生example"If a Friday lands on the 13th of the month, it is generally considered to be an unlucky day!"

非显式:

int i = 13;
string example = String.Format("If a Friday lands on the {0}th of the month, it is generally considered to be an unlucky day!",
                                i);

生成example为:"If a Friday lands on the 13th of the month, it is generally considered to be an unlucky day!"(与显式转换相同)。那么为什么我看到的大多数程序员都这样做呢?

在 String.Format() 中显式转换 int 的原因是什么?

如果使用隐式转换,则int将框在object。这是一个很小的性能影响,但有些人似乎认为它很重要,并且可能会解释代码。

事实上,Jeffrey Richter 在他通过 C# 的优秀 CLR 中写到了这一点(鼓励使用这种东西)。这让我很恼火,以至于我在博客上写了:)

当然,在某些地方,拳击可能是相关的 - 但考虑到string.Format需要走格式字符串并做各种其他事情,我不希望它在这里很重要......这是在您考虑接下来要如何处理字符串之前:)

我真的看不出这样做的理由。正如您所指出的,由于String.Format()已经这样做了,因此如果您只是让String.Format()照顾它,它会更紧凑且 IMO 更容易阅读。

因为我们习惯了规则,你最好也习惯了。 String.Format()是一个聪明的方法,但不是每个方法。 请记住,String.Format() 会获取对象,因此您不需要转换,但是如果您这样做,您仍然会发送对象。