背景: 有這樣的開發者原則「如果請求的項目不存在,我的函數應該返回null還是拋出異常?」我不想在這裏討論。我決定爲所有必須返回值的情況拋出一個異常,並且這個值只在(編程或邏輯)無效請求的情況下才存在。C#:聲明一個函數永遠不會返回null?
最後我的問題: 我可以標記功能,使編譯器知道它永遠不會返回null,並警告任何人誰檢查,如果返回值是空?
背景: 有這樣的開發者原則「如果請求的項目不存在,我的函數應該返回null還是拋出異常?」我不想在這裏討論。我決定爲所有必須返回值的情況拋出一個異常,並且這個值只在(編程或邏輯)無效請求的情況下才存在。C#:聲明一個函數永遠不會返回null?
最後我的問題: 我可以標記功能,使編譯器知道它永遠不會返回null,並警告任何人誰檢查,如果返回值是空?
您可以使用Code Contracts
來做到這一點。
例子:
public String Method1()
{
Contract.Ensures(Contract.Result<String>() != null);
// To do
}
如果你返回一個值類型,那麼它不能爲null(除非你明確地使用系統的'可空'包裝器來使它成爲。
您正在尋找Code Contracts
使用代碼契約,你可以定義一個方法沒有返回null合同。
using System.Diagnostics.Contracts; // required namespace
public T MethodName()
{
Contract.Ensures(Contract.Result<T>() != null); //where T is the return type.
// method body...
}
[我怎麼能證明一個方法永遠不會返回null在C#(契約式設計)](可能的重複http://stackoverflow.com/questions/484571/how-can-i-show-這種方法將不會返回空設計合同在c) – 2010-12-01 12:55:53
另外:http://stackoverflow.com/questions/792531/c-how-to-implement-and-use -a-notnull-and-canbenull-attribute – 2010-12-01 12:59:19