我在代码审查期间遇到了一些看起来不正确的代码,但不确定更改它的“最佳”方法。在寻找答案时,我发现哪个更好,使用可空或布尔返回+输出参数,哪个更好,返回值或输出参数? 后者对此评论的回答是我普遍同意的:
如果您发现自己需要从 API 返回两个东西,那么将它们包装在结构/类中会比输出参数更好。”
这是相关代码的代表性示例。它是 Web 应用程序的一部分,基本上循环遍历字符缓冲区,并希望将“不可打印”字符转换为替换字符或字符串。为此,Translate
方法的作者总是返回一个字符串,而调用者必须转换回字符数组。
string character = Translate(value);
if (character.Length == 1) {
writer.Write(character[0]);
} else {
writer.Write(character.ToCharArray());
}
public string Translate(char value) {
if (value <= '\u017F') {
return value.ToString();
}
switch (value) {
case '\u2117':
return '\u00A9'.ToString(); // copyright sign
case '\u211E':
return "Rx"; // prescription
// ... and lots more case statements
}
return value.ToString();
}
在我看来,我有几个选择。我是让调用者根据 null 或 String.Empty 值推断要使用哪个字符或字符串,还是使用 out bool 明确?我不想为通过此函数的每个字符新建并返回一个元组对象实例,因为这似乎有很多对象创建开销和未来的垃圾收集。
public string Translate(char value, out char newValue)
public void Translate(char value, out char? newCharValue, out string newStringValue)
public void Translate(char value, out bool useChar, out char newCharValue, out string newStringValue)