【问题标题】:Lambda expression to replace if statement替换 if 语句的 Lambda 表达式
【发布时间】:2021-03-24 10:17:39
【问题描述】:

我想删除带有 lambda 表达式的 if 语句以避免重复

if (string.IsNullOrEmpty(ConfigurationSettings.Hour.ToString()))
{
       service.ScheduleQuartzJob(q =>
       q.WithJob(() =>
       JobBuilder.Create<ServiceJob>().Build())
       .AddTrigger(() => TriggerBuilder.Create()
       .WithCronSchedule(ConfigurationSettings.RunAtSchedule)
       .Build()));
}
else
{
       service.ScheduleQuartzJob(q =>
       q.WithJob(() =>
       JobBuilder.Create<ServiceJob>().Build())
       .AddTrigger(() => TriggerBuilder.Create()
       .WithSchedule(CronScheduleBuilder
       .DailyAtHourAndMinute(ConfigurationSettings.Hour,
       ConfigurationSettings.RunAtMinute))
       .Build()));
}

如何重构它以使用 lambda 替换 if 语句?

非常感谢

加里

【问题讨论】:

  • 您的意思是要将 lambda 传递到声明它的方法中以替换 .AddTrigger( .... ) 部分吗?
  • 是的,在 AddTrigger(() => TriggerBuilder.Create() 部分之后。谢谢

标签: c# quartz


【解决方案1】:

不清楚用 lambda 替换它是什么意思。但我认为这可能与您所追求的接近

var builder = TriggerBuilder.Create();
var schedule = string.IsNullOrEmpty(ConfigurationSettings.Hour.ToString()) 
    ? builder.WithCronSchedule(ConfigurationSettings.RunAtSchedule)
    : builder.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(ConfigurationSettings.Hour, ConfigurationSettings.RunAtMinute));

service.ScheduleQuartzJob(
  q => q.WithJob(
    () => JobBuilder.Create<ServiceJob>().Build())
                    .AddTrigger(() => schedule.Build())
  ) 
);

我对 Quartz 不熟悉,但我假设以上应该可以工作。如果你需要在 lambda 中传递它,你可以这样做:

service.ScheduleQuartzJob(
  q => q.WithJob(
    () => JobBuilder.Create<ServiceJob>().Build())
                    .AddTrigger(
                          () => (string.IsNullOrEmpty(ConfigurationSettings.Hour.ToString()) 
                              ? TriggerBuilder.Create().WithCronSchedule(ConfigurationSettings.RunAtSchedule)
                              : TriggerBuilder.Create().WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(ConfigurationSettings.Hour, ConfigurationSettings.RunAtMinute))
                            ).Build()
             )
      ) 
);

注意:我认为我匹配了所有右括号,但我可能在移动设备上输入时错过了一个。

【讨论】:

  • 注意:我是在手机上输入的。它可能缺少右括号。致审稿人:格式在移动设备上看起来还不错,我会很高兴能对外观进行调整
猜你喜欢
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多