繁体   English   中英

Lambda 表达式替换 if 语句

[英]Lambda expression to replace if statement

我想删除带有 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 替换它是什么意思。 但我认为这可能接近你所追求的:

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()
             )
      ) 
);

注意:我我匹配了所有右括号,但是当我在手机上输入时,我可能错过了一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM