C#語法 - 從方法中獲得2或3個答案的首選方法 [c#]


Answers

這完全取決於結果是什麼。 如果他們彼此相關,我通常會創建一個自定義類。

如果他們沒有真正相關,我可以使用一個out參數或分割方法。 如果一個方法想要返回三個不相關的項目,那可能是太多了。 這是一個例外,當你在通過網絡服務邊界進行交談時,或者其他“更純粹”的API可能過於瑣碎的東西。

Question

我只是想知道其他開發人員如何解決從一個方法獲得2或3個答案的這個問題。

1)返回一個對象[]
2)返回一個自定義的類
3)在多個變量上使用out或ref關鍵字
4)寫或借(F#)一個簡單的Tuple <>泛型類
http://slideguitarist.blogspot.com/2008/02/whats-f-tuple.html

我現在正在研究一些代碼來刷新數據。 從刷新的方法我想回傳(1)刷新開始時間和(2)刷新結束時間。
在稍後的日子,我可能想要傳回第三個值。

思考? 有關此主題的開源.NET項目的任何良好實踐?




代碼Architeture明智的,我總是要去一個自定義類,當需要一些特定數量的變量更改。 為什麼? 簡單地說,因為一個類實際上是一個經常使用的數據類型的“藍圖”,創建自己的數據類型,這將是幫助您獲得一個良好的結構,並幫助其他人為您的界面編程。




如果只有一個或兩個額外的變量(例如,一個函數返回一個實際的重要結果的bool,而且為了記錄目的而返回函數運行多長時間的out參數,那麼我會用掉)。

對於更複雜的東西,我通常會創建一個自定義的結構/類。




這取決於。 對於內部唯一的API,我通常會選擇最簡單的選項。 一般來說,

對於一個公共的API來說,一個自定義的類通常更有意義 - 但是如果它是相當原始的東西,或者這個函數的自然結果是一個布爾類型(比如* .TryParse),我會堅持一個out參數。 你也可以用一個隱式轉換來做一個自定義的類來布爾,但這通常很奇怪。

對於你的特定情況,一個簡單的不可變的DateRange類似乎是最適合我的。 您可以輕鬆添加新的價值,而不會打擾現有的用戶。




有些人使用KeyValuePair作為兩個值。 這不是很好,因為它只是將兩件事情標記為KeyValue 。 不是很具描述性。 此外,它會從這個增加了很大的好處:

public static class KeyValuePair
{
    public static KeyValuePair<K, V> Make(K k, V v) 
    { 
        return new KeyValuePair<K, V>(k, v); 
    }
}

保存您不必在創建類型時指定類型。 泛型方法可以推斷類型,泛型類構造函數不能。




返回一個自定義的類型,但不要使用一個類,使用一個結構體 - 沒有內存分配/垃圾回收開銷意味著沒有缺點。




另一個解決方案是返回一個命名對象引用的字典。 對我來說,這相當於使用自定義的返回類,但沒有混亂。 (使用RTTI和反射,就像其他解決方案一樣,儘管是動態的,也是如此。)




如果一個方法輸出兩到三個相關的值,我將它們分組在一個類型中。 如果這些值是不相關的,這個方法很可能會做太多的事情,我會把它重構成許多更簡單的方法。