【发布时间】:2010-11-09 23:13:33
【问题描述】:
我在代码审查期间遇到了一些看起来不正确的代码,但不确定更改它的“最佳”方法。在寻找答案时,我发现了which is better, using a nullable or a boolean return+out parameter 和Which is better, return value or out parameter? 后者对此评论有一个我普遍同意的答案:
如果您发现自己需要从 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)
【问题讨论】:
标签: c# coding-style out-parameters