簡體   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