
虽然可能没有一种正确的方式来格式化你的C#代码,但在团队中达成一致的风格可以使代码库更清晰、更易读且更具可扩展性。本页面提供了在创建自己的风格指南时,关于类、方法和注释的一些提示和关键考虑事项。
注意:这里分享的建议基于微软提供的建议。最佳的代码风格指南规则是适合你团队需求的规则。
您可以在 这里 找到代码风格指南示例或下载完整的电子书,使用 C# 风格指南以编写干净且可扩展的游戏代码(Unity 6 版)。
与命名一起,格式化有助于减少猜测并提高代码清晰度。通过遵循标准化的风格指南,代码审查变得不再关注代码的外观,而是关注代码的功能。
省略、扩展或修改这些示例规则以适应您团队的需求。
在所有情况下,请考虑您的团队将如何实施每个格式化规则,然后让每个人统一应用。参考您团队的风格以解决任何差异。
在设置您的 Unity 开发风格指南时,请考虑以下每个代码格式化建议。
对于单行只读属性(=>)使用表达式主体属性:这将返回私有后备字段。
其他所有内容使用较旧的 { get; set; } 语法:如果您只想公开一个公共属性而不指定后备字段,请使用 自动实现的属性。为设置和获取访问器应用表达式主体语法。如果您不想提供写入访问权限,请记得将设置器设为私有。对齐多行代码块的闭合括号与开括号。
脚本序列化是将数据结构或对象状态转换为 Unity 可以存储和稍后重建的格式的自动过程。出于性能原因,Unity 的序列化处理方式与其他编程环境不同。
序列化字段会出现在检查器中,但您不能序列化静态、常量或只读字段。它们必须是公共的或带有 [SerializeField] 属性。Unity 仅序列化某些字段类型,因此请参考 文档页面 以获取完整的序列化规则。
在处理序列化字段时,请遵循一些基本指南:
从另一个类引用此可序列化类。结果变量在检查器中以可折叠单元的形式出现。

C#中有两种常见的缩进风格:
这些缩进风格也有变体。本指南中的示例使用来自Microsoft框架设计指南的Allman风格。无论您作为团队选择哪种风格,请确保每个人都遵循相同的缩进和花括号风格。
缩进通常为两个或四个空格。让您团队中的每个人在编辑器首选项中达成一致设置,而不引发制表符与空格的争论。请注意,Visual Studio提供将制表符转换为空格的选项。
在Visual Studio(Windows)中,导航到工具 > 选项 > 文本编辑器 > C# > 制表符。
在Mac上的Visual Studio中,导航到首选项 > 源代码 > C#源代码。选择文本样式以调整设置。

不要省略花括号——即使是单行语句也不例外。花括号增加了一致性,使你的代码更易于阅读和维护。在此示例中,花括号清楚地将操作DoSomething与循环分开。
如果稍后需要添加调试行或运行DoSomethingElse,花括号将已经到位。将子句放在单独一行可以让您轻松添加断点。
不要从嵌套的多行语句中删除大括号。在这种情况下删除大括号不会抛出错误,但可能会导致混淆。即使大括号是可选的,也要使用大括号以提高清晰度。花括号还确保可以安全地进行修改,例如添加新逻辑,而无需重构周围的结构。
格式可能会有所不同,因此请在您的风格指南中记录团队偏好,并相应地标准化您的 switch 语句。
这是一个示例,您可以在其中缩进案例语句。通常建议包括一个默认案例。即使不需要默认案例(例如,在所有可能性都已覆盖的情况下),包括一个也可以确保代码准备好处理意外值。
像空格这样简单的东西可以增强您代码在屏幕上的外观。您的个人格式化偏好可能会有所不同,但请尝试以下建议以提高可读性。
添加空格以减少代码密度。额外的空白可以在行的部分之间提供视觉分隔感,从而提高可读性。
在函数参数之间的逗号后使用一个空格。
在括号和函数参数后不要添加空格。
函数名称和括号之间不要使用空格。
尽量避免在括号内使用空格。
在流程控制条件前使用一个空格,并在流程比较运算符和括号之间添加空格。
在比较运算符前后使用一个空格。
保持行短。考虑水平空白:决定一个标准行宽(80-120个字符)。将长行拆分为较小的语句,而不是让它溢出。
保持缩进/层次结构:缩进您的代码以增加可读性。
除非需要提高可读性,否则不要使用列对齐:这种类型的间距对齐变量,但可能会使类型与名称配对变得困难。
然而,列对齐对于位运算表达式或包含大量数据的结构体可能是有用的。请注意,随着您添加更多项目,这可能会为您维护列对齐带来更多工作。一些自动格式化工具可能还会改变列的对齐部分。
您也可以利用垂直间距。将相关的脚本部分放在一起,并利用空行。尝试这些建议将您的代码从上到下组织:
将此保持在最低限度,并在样式指南中注明适用的地方。
在代码中使用区域
#region 指令使您能够折叠和隐藏 C# 文件中的代码部分,使大型文件更易于管理和阅读。
然而,如果您遵循本指南中关于类的一般建议,您的类大小应该是可管理的,#region指令是多余的。将代码分解为更小的类,而不是将代码块隐藏在区域后面。如果源文件较短,您将不太倾向于添加区域。
注意:许多开发人员认为区域是代码异味或反模式。作为一个团队决定您站在辩论的哪一方。
如果这些格式规则看起来令人不知所措,不要绝望。现代 IDE 使设置和强制执行它们变得高效。您可以创建格式规则的模板,然后一次性转换项目文件。
要为脚本编辑器设置格式规则:
如果您希望在任何时候强制脚本文件符合样式指南:
在Windows上,您还可以从工具 > 导入和导出设置共享您的编辑器设置。导出一个包含样式指南的 C# 代码格式的文件,然后让每个团队成员导入该文件。
Visual Studio使遵循样式指南变得简单。格式化变得像使用快捷键一样简单。
注意:您可以配置一个EditorConfig文件,而不是导入和导出Visual Studio设置。这样做可以更轻松地在不同的IDE之间共享格式,并且它还有与版本控制一起使用的额外好处。有关更多信息,请参见.NET代码样式规则选项。
虽然这并不特定于干净代码,但请务必查看在Unity中使用Visual Studio加速编程工作流程的10种方法。如果您应用这些生产力技巧,干净的代码更容易格式化和重构。

要在Visual Studio Code中设置.editorconfig文件,请按照以下步骤操作:
以下是C#的示例配置:
# 顶层EditorConfig文件
root = true
# Unix风格的换行符,每个文件以换行结束
[*]
end_of_line = lf
insert_final_newline = true
# 4个空格缩进
[*.cs]
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
# Makefile的制表符缩进
[Makefile]
indent_style = tab
# JSON文件的特定设置
[*.json]
indent_style = space
indent_size = 2