2016-11-08 28 views
-1

鑑於類:檢查Func鍵<T>不爲空,而不調用它

public class Options<T> 
{ 
    protected internal Func<T> GetFromDB { get; set; } 
} 

我將如何檢查GetFromDB方法本身不爲空,而不調用該方法?如果我這樣做:

if (options.GetFromDB() != null) 
{ 
    var r = options.GetFromDB(); 
    ... do something 
} 

它似乎在傳遞的方法中調用兩次代碼,一次爲空檢查,一次爲實際調用返回。

+1

您可以緩存結果,但我不知道如何在不調用函數的情況下知道函數的返回值。您也可以將返回值分配給一個變量,並檢查該變量是否爲非空值。 –

+0

如果要檢查函數的* result *是否爲null或檢查是否沒有提供函數 –

+0

'options.GetFromDB()!= null'正在測試執行方法是null,而不是'func'本身 – Jonesopolis

回答

4

這不行嗎?

if (options.GetFromDB != null) 
+0

正如我在問題中提到的那樣,它會執行這個方法。 –

+0

你的例子有'GetFromDB()',而不是'GetFromDB' – John

+0

它不會執行方法沒有parens() –

相關問題