c# - 可以返回字符或字符串的 c# 方法的返回值或输出参数?

标签 c# coding-style out-parameters

我在代码审查期间遇到了一些看起来不正确的代码,但不确定更改它的“最佳”方法。在寻找答案时,我找到了 which is better, using a nullable or a boolean return+out parameterWhich is better, return value or out parameter?后者有一个我普遍同意的评论的答案:

If you find yourself needing to return two things from an API then wrapping them up in a struct/class would be better than an out param."

这是相关代码的代表性示例。它是 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 值推断要使用哪个 char 或 string,还是使用 out bool 明确说明?我不想为通过此函数的每个字符新建并返回一个元组对象实例,因为这似乎有很多对象创建开销和 future 的垃圾收集。

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)

最佳答案

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

关于c# - 可以返回字符或字符串的 c# 方法的返回值或输出参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4139692/

相关文章:

c# - 如何重写具有 out 参数的虚拟方法?

c# - 为什么我不能在 out 参数中传递一个未分配的对象变量然后分配它

c++ - 在 C/C++ 中,任何人都可以提供一些使用内联或宏编写小函数的经验法则吗?

c# - 为什么对于那些喜欢类型安全的人来说 Null 不是类型安全的无关紧要

带有 out 参数的 c# 泛型委托(delegate) - 定义和调用

c# - 使用 Entity Framework 4.0/.edmx 从 c# 调用标量函数

c# - 特殊名称属性还允许使用哪些巧妙的技巧?

c# - Sql 数据库中的字符串是问号 C#

c# - 在 C# 中使用补充 Unicode 字符作为 char 文字

c# - 不将新实例分配给变量是不是糟糕的编码风格?