【问题标题】:Check Func<T> is not null without calling it检查 Func<T> 不为空而不调用它
【发布时间】:2016-11-08 18:12:45
【问题描述】:

给定班级:

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

如何在不调用该方法的情况下检查GetFromDB 方法本身是否为空?如果我这样做:

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

似乎在传递的方法中调用了两次代码,一次用于空检查,一次用于实际调用并返回。

【问题讨论】:

  • 你可以缓存结果,但我不知道你怎么知道函数的返回而不调用函数。您也可以将返回值分配给一个变量并检查该变量是否为非空。
  • 如果要检查函数的result是否为null或检查是否没有提供函数,你应该说清楚
  • options.GetFromDB() != null 正在测试执行方法的返回值是否为null,而不是func 本身
  • @MarkPeters 是的,你是对的,已编辑问题
  • 这个怎么样?if ((r = options.GetFromDB()) != null)

标签: c# function parameters null


【解决方案1】:

这样不行吗?

if (options.GetFromDB != null)

【讨论】:

  • 正如我在问题中提到的,它将执行该方法。
  • 你的例子有GetFromDB(),而不是GetFromDB
  • 它不会执行没有parens()的方法
  • 我省略了(),所以它是访问属性而不是调用函数
  • 啊,太好了,谢谢你这是一个正确的答案!还发现您可以通过自定义 getter/setter 来解决它,其中 setter 设置了一个您可以检查的 bool。这种方式显然更好!
猜你喜欢
  • 2010-10-22
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多