繁体   English   中英

是否可以返回char或字符串的c#方法的返回值或out参数?

[英]Return value or out parameter for c# method that can return either a char or string?

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

如果您发现自己需要从API返回两件事,那么将它们包装在struct / class中将比out参数更好。”

这是有问题的代码的代表性示例。 它是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();
}

在我看来,我有两种选择。 是否根据空值或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)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM