private Option <Action <TMetadata> > GetMappingApplication <TMetadata>(IPropertyMapping propertyMapping, IEnumerable <object> sources, TMetadata target, Action <string> log) { Option <object> source = sources.FirstOrDefault(s => propertyMapping.CanApply(s, target)); return(source.Map(s => (Action <TMetadata>)(t => ApplyMapping(propertyMapping, s, t, log)))); }