在.NET中,「out」參數是一件壞事嗎?關於這個話題的任何好文章/討論?在.NET中,「out」參數是一件壞事嗎?
回答
那麼,我有an article on what ref/out do - 但它沒有討論你是否應該使用它們。
基本上out
參數通常是一個符號,您希望有效地返回方法的兩個結果。這是通常代碼的氣味 - 但有一些情況下(最顯着與TryXXX模式),你真的想要返回兩條信息的原因很好,它沒有多大意義將它們封裝在一起。
換句話說,避免出/ ref,你可以輕鬆地做到這一點,但不要大量地避開它們。
你的最後一句話是良好的,堅實的,務實的建議。 – 2008-11-11 14:43:38
對於大多數情況下,我建議不要使用Out參數。他們基本上會爲代碼添加副作用,並且在調試時可能會是一場噩夢。
有MSDN上就出在這裏提供參數的文章:http://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx
我覺得需要的時候他們是真正有用的。
Msdn article for ref和out參數。
好問題。我的回答是我不特別喜歡它們,但是我在其中一個項目中使用它們,其中多個返回值是常見的。我有一個財務數據庫,它返回實際的價格(或空/零),一個主要的錯誤代碼和一個小錯誤代碼。該庫有幾十到幾百種方法,並且每個錯誤代碼都是不同的類型,因此爲每個方法創建自定義類並返回該類的實例將非常不方便。
的FxCop並不認爲這是個好主意......
http://msdn.microsoft.com/en-us/library/ms182146(VS.80).aspx
輸出參數,當你需要返回多個對象作爲函數的結果是有用的。我的眼睛,
void doSomeThing(Thing toDoItTo,
out OtherThing result1,
out AnotherThing result2)
{
...
}
OtherThing y;
AnotherThing z;
doSomeThing(x, out y, out z);
y.method1();
z.method2();
比
struct DoSomeThingResults
{
public OtherThing Result1;
public OtherThing Result2;
}
DoSomeThingResults doSomeThing(Thing toDoItTo)
{
...
}
DoSomethingResults results = doSomeThing(x);
results.Result1.method1();
results.Result2.method2();
,另外,採用了參數意味着其結果,保證分配更清潔了很多。
在沒有元組的情況下,它們有時是最乾淨的方法。不過,我通常討厭他們。
F#有一些很好的語法糖來處理它們。而不是讓我處理out
參數,它將它們視爲返回元組的方法。各種TryParse
方法最終返回二元元組:
let success, value = Int32.TryParse("1234")
(* success is true *)
(* value is 1234 *)
這是相當得心應手,並沒有讓我覺得髒。
我也喜歡這個糖! – BuddyJoe 2008-11-11 15:01:37
它不是太壞使用外出
讓我們嘗試precising好處:
using ref force us to initialize it so we are letting the ref variable to place in heap and consume some spaces .
in most cases we return null if the operation has some none logic conditions
but with Out we avoid consuming the heap and refspace
- 1. 長方法是一件壞事嗎?
- 2. 參數1號是不是OUT參數
- 3. 虛擬析構函數可以是一件壞事嗎?
- 4. 直接使用HttpContext是件壞事嗎?
- 5. out函數out的參數
- 6. 正在刪除未使用的功能是一件壞事嗎?
- 7. java.sql.SQLException:參數號X不是OUT參數
- 8. IoC範例中的非平凡構造函數是一件壞事嗎?
- 9. 前out參數
- 10. Moq out參數
- 11. PL/SQL中的IN,OUT,IN OUT參數到底是什麼
- 12. 將一個方法作爲字符串參數傳遞給一個指令不是一件壞事嗎?
- 13. 許多DLL的應用程序是一件壞事嗎?
- 14. 全球配置類是一件壞事嗎?
- 15. 注入DAO到實體是一件壞事嗎?
- 16. 脆弱的單元測試總是一件壞事嗎?
- 17. 私人子類...這是一件壞事嗎?
- 18. 在C++中,你有像c#中的「out參數」嗎?
- 19. 取OUT參數的SQLException中
- 20. 提取類OUT參數中
- 21. 在out參數不能在MySQL中
- 22. 在事件中定義一個參數
- 23. 是否將SQL查詢存儲在數據庫中是一件壞事?
- 24. MethodInfo.Invoke與OUT參數
- 25. Out參數與RhinoMocks
- 26. 使用OUT參數,
- 27. 值java.sql.SQLException:參數號2是不是OUT參數
- 28. 在C#中使用「out參數」遞歸
- 29. 在JavaScript中使用「Out」參數
- 30. 在控制器中放置太多before_filter是一件壞事?
這個問題有一個很好的討論:http://stackoverflow.com/questions/214688/why -does-the-net-framework-guidelines-recommend-that-you-dont-use-refout-argume – Brian 2008-11-11 14:43:18