C# 检查函数<;T>;如果不调用它,则不为null

C# 检查函数<;T>;如果不调用它,则不为null,c#,function,parameters,null,C#,Function,Parameters,Null,鉴于班级: public class Options<T> { protected internal Func<T> GetFromDB { get; set; } } 它似乎在传递的方法中调用代码两次,一次用于null检查,另一次用于实际的返回调用。这不起作用吗 if (options.GetFromDB != null) 这样不行吗 if (options.GetFromDB != null) 你可以缓存结果,但我不知道你如何知道函数的返回而不调用函数。

鉴于班级:

public class Options<T>
{
    protected internal Func<T> GetFromDB { get; set; }
}
它似乎在传递的方法中调用代码两次,一次用于null检查,另一次用于实际的返回调用。

这不起作用吗

if (options.GetFromDB != null)
这样不行吗

if (options.GetFromDB != null)

你可以缓存结果,但我不知道你如何知道函数的返回而不调用函数。您也可以将返回值赋给变量,然后检查变量是否为非null。您应该明确是否要检查函数的结果是否为null,或者检查是否没有提供函数
选项。GetFromDB()!=null
正在测试执行方法的返回值是否为null,而不是
func
itself@MarkPeters是的,你是对的,编辑了这个问题怎么样?
如果((r=options.GetFromDB())!=null)
你可以缓存结果,但我不知道你如何知道函数的返回而不调用函数。您也可以将返回值赋给变量,然后检查变量是否为非null。您应该明确是否要检查函数的结果是否为null,或者检查是否没有提供函数
选项。GetFromDB()!=null
正在测试执行方法的返回值是否为null,而不是
func
itself@MarkPeters是的,你是对的,编辑了问题这是怎么回事?
如果((r=options.GetFromDB())!=null)
正如我在问题中提到的,这将执行该方法。你的示例有
GetFromDB()
,不是<代码> GETOFFBD< <代码>它不会执行没有PARNS()的方法(我省略了),所以它正在访问属性而不是调用函数AGHOH,谢谢,这是正确的答案!还发现,您可以通过自定义getter/setter来解决这个问题,其中setter设置了一个bool,您可以检查它。这样显然更好!正如我在这个问题中提到的,它将执行该方法。您的示例有“代码> GETFROM DB())/代码>,而不是<代码> GETFROBDB < /代码>,它将不执行没有PARNS()的方法(我省略了),因此它访问了属性而不是调用函数AGHOH,谢谢!这是正确的答案!还发现,您可以通过自定义getter/setter来解决这个问题,其中setter设置了一个bool,您可以检查它。这样显然更好!