2

我在 C# 中使用 Unity3D 进行编码,在打印或使用调试语句或控制台语句时,我总是使用这样的东西:

Debug.Log("The sum of these two variables is :" + SumOfVariables);

但是,我正在阅读一本新书以尝试学习成为一名更好的程序员,而他们经常使用它来代替:

Debug.Log("The sum of these two variables is {0}", SumOfVariables);

我认为这两种方式都没有关系,但使用后者有优势吗?此外,对于使用统一的任何人,当我尝试以这种方式使用它时,我会收到一条错误消息,但当我使用第一种方法时它工作正常。它基本上说 Debug.Log 没有参数。而且我无法将字符串表达式转换为 UnityEngine.Object 类型。我使用的变量是一个类的字符串属性。

我的问题不是关于统一,而是更多关于哪个更好。但是,如果你想告诉我为什么我会得到这个错误,那将是非常好的。我确定以前有人问过这个问题,但是当我尝试搜索时,我得到了各种不同的主题,所以我提前道歉,谢谢你的回答!!

4

5 回答 5

4

您应该使用格式字符串而不是字符串连接的原因是因为它使本地化成为可能。将格式字符串翻译成不同的语言很容易,但重写代码却很难。

"{0}: invalid photoscamp (id={1}) inside flange"

在猪拉丁语中,

"{0}: invaliday otoscamphay (iday={1}) insidea angeflay"

使用格式字符串还有其他原因,例如性能、代码可读性以及将格式字符串存储在文件或数据库中的能力。请参阅C# 字符串输出:格式还是连接?为什么使用 String.Format?.

于 2013-05-19T19:59:16.260 回答
3

{}使用格式字符串版本时,它可以更轻松地重复变量。

此外,它可以很容易地将字符串作为一个项目读取,使用占位符并添加占位符(只需{}使用正确的索引添加另一个并输入另一个参数)。

通常,格式字符串往往更易于阅读和稍后更改。

于 2013-05-19T19:55:45.567 回答
0

这只是一种不同类型的字符串插值。主要是出于美观的原因,但有些人发现支架也更容易使用

于 2013-05-19T19:57:16.110 回答
0

查看 Debug.Log 方法的签名。第二个版本将具有以下内容:

string format, params object[] p

所以第一个参数是格式,“第二个”参数实际上是可变数量的参数,代表格式字符串中的替换。

从代码维护的角度来看,第二个是首选——它更容易阅读代码的意图并在以后进行修改——因此比连接字符串更好。

因此,要回答您关于为什么第二种方式不起作用的问题,很可能没有将格式字符串作为第一个参数的 Debug.Log 重载。对于其他日志框架(例如,Debug.WriteLine),通常会有一个格式参数。

于 2013-05-19T20:02:27.353 回答
0

{} 机制相对于简单串联的一个重要优势是关注点分离。从抽象的角度考虑这个问题:这里有许多数据元素,需要将它们组合成一个序列来组成一段文本。

使用连接方法,组合数据元素的确切规则在代码中几乎是固定的。使用 {} 机制,需要组合的组件列表在代码中仍然是固定的——这没关系,因为基准列表通常只取决于程序的逻辑。但是,该组合的确切性质被隔离在单个字符串中,这意味着它可以根据用户偏好或其他环境因素轻松控制和调整,而无需更改逻辑。

这听起来非常晦涩和理论上,但事实并非如此。到目前为止,这种权力最常见的用途是“本地化”。通过为不同的语言或“文化”存储不同版本的模式字符串,您可以轻松地生成在您选择的任何语言上语法正确的消息,可能基于用户选项。除了最简单的情况(如果没有其他情况,因为您无法在运行时更改元素的顺序),通过连接方法执行相同的操作几乎是不可能的。

这不是唯一的可能性:您可以拥有一个多客户端系统,该系统根据每个不同客户端的需求生成不同的消息。或者可能是一个系统,它为技术复杂的用户(例如,为您公司的技术支持工作的专家)编写复杂的详细错误消息,而当用户是临时用户(例如,客户)时,系统会编写更简单的错误消息。

于 2013-05-19T20:28:28.563 回答