Мне очень нравится работать с дополнительными расширениями Parallel Extensions. но должен признать, что все еще испытываю затруднения, когда дело доходит до создания расширений для методов программирования Fluent.
У меня есть особая потребность, учитывая этот простой BusinessEntity
следующий шаблон нулевого объекта
public abstract class BusinessEntity
{
public static readonly BusinessEntity Null = new NullBusinessEntity();
public long EntityKey { get; set; }
private class NullBusinessEntity : BusinessEntity
{
}
}
Как мне создать шаг «условный следующий», который будет выполнять тело функции только в том случае, если условие будет выполнено?
На данный момент это то, что я делаю:
Func<BusinessEntity, Func<BusinessEntity,BusinessEntity>, BusinessEntity> conditional = (be, func) =>
{
if (be.Equals(BusinessEntity.Null)) return be;
return func.Invoke(be);
};
Затем в конвейере я вызываю его так:
Pipeline<BusinessEntity, string> pipeline = Pipeline.Create<BusinessEntity, BusinessEntity>(CheckEntity)
.Next<BusinessEntity>(be => conditional.Invoke(be, entity => ProcessEntity(be)))
.Next<string>(FinalResult);
Есть ли способ создать расширение для конвейера, специфичное для моего BusinessEntity
(или нет), которое позволило бы мне называть его следующим образом:
Pipeline<BusinessEntity, string> pipeline = Pipeline
.Create<BusinessEntity, BusinessEntity>(CheckEntity)
.ConditionalNext<BusinessEntity>(ProcessEntity)
.Next<string>(FinalResult);
Это возможно?
func.Invoke(be)
, вы можете написать толькоfunc(be)
. - person svick   schedule 02.08.2014