Набор интерфейсов: < /p>
Код: Выделить всё
public interface IGetData
{
Task GetDataAsync(string condition);
}
public interface IGetDataA : IGetData
{
Task GetDataAsync(CriteriaA criteria);
}
public interface IGetDataB : IGetData
{
Task GetDataAsync(CriteriaB criteria);
}
< /code>
, а затем на странице (после создания компонентов): < /p>
public async Task RefreshAsync()
{
var itemsA = items.Where(x => x.Ref.Instance is IGetDataA)
.Select(x => x.Ref.Instance)
.Cast();
await Parallel.ForEachAsync(itemsA, async (item, token) =>
{
await item.GetDataAsync(criteriaA);
});
var itemsB = items.Where(x => x.Ref.Instance is IGetDataB)
.Select(x => x.Ref.Instance)
.Cast();
await Parallel.ForEachAsync(itemsB, async (item, token) =>
{
await item.GetDataAsync(criteriaB);
});
}
Код: Выделить всё
public interface IGetData
{
Task GetDataAsync(string condition);
Task GetDataAsync(T data);
}
< /code>
и код: < /p>
bool IsGetData(object o) => o.GetType().GetInterfaces().Any(x =>
x.IsGenericType &&
x.GetGenericTypeDefinition() == typeof(IGetData));
var list = items.Where(x => IsGetData(x.Ref.Instance))
.Select(x => x.Ref.Instance);
await Parallel.ForEachAsync(list, async (item, token) =>
{
if (item is ItemA)
await (item as ItemA).GetDataAsync(criteriaA);
else if (item is ItemB)
await (item as ItemB).GetDataAsync(criteriaB);
});
Подробнее здесь: https://stackoverflow.com/questions/796 ... ugh-a-list
Мобильная версия