1

我在代码审查期间遇到了一些看起来不正确的代码,但不确定更改它的“最佳”方法。在寻找答案时,我发现哪个更好,使用可空或布尔返回+输出参数哪个更好,返回值或输出参数? 后者对此评论的回答是我普遍同意的:

如果您发现自己需要从 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)
4

3 回答 3

4

总是返回一个字符串(长度为 0、1 或多个)并总是调用writer.Write(string)怎么办?

于 2010-11-09T23:15:38.080 回答
1

如果你返回一个字符串,为什么不使用“\u00A9”而不是'\u00A9'.ToString()?

于 2010-11-10T01:17:37.510 回答
0

您是希望在任何地方独立使用此 Translate 方法,还是总是将其用于将一个流的数据写入另一个流?将 writer 传递给 Translate 方法并让它调用适当的writer.Write方法怎么样?

于 2010-11-10T00:01:38.413 回答