Результатом первой наблюдаемой (itemsCache.GetAllKeys()
) является список строк.Если этот список содержит определенную строку (DOKUMENTI_KEY
), то должна вызываться вторая наблюдаемая.Если первая наблюдаемая не содержит строку, то должен быть возвращен пустой список.
public static IObservable<TResult> If<TSource, TResult>(
this IObservable<TSource> source,
Func<TSource, bool> predicate,
Func<TSource, IObservable<TResult>> thenSource,
Func<TSource, IObservable<TResult>> elseSource)
{
return source
.SelectMany(
value => predicate(value)
? thenSource(value)
: elseSource(value));
}
public IObservable<List<Dokument>> GetDokumenti()
{
return Observable.If(
() => itemsCache.GetAllKeys().SelectMany(x => x).Contains(DOKUMENTI_KEY).GetAwaiter().GetResult(),
itemsCache.GetAllKeys().SelectMany(y => y).Where(a => a == DOKUMENTI_KEY).SelectMany(z => itemsCache.GetObject<List<Dokument>>(z)),
Observable.Return(new List<Dokument>())
);
}
Есть ли лучший способ сделать это?