Я пытаюсь преобразовать базовый тип в производный тип с помощью «OfType (). Cast (). ToList ()»
Вот мой метод
public class CosmosDBRepository<T> : ICosmosDBRepository<T> where T : class
{
public async Task<List<T>> GetSubscriptions<T, TE>(TE eventItem, params SubscriptionAction[] subscriptionAction)
where T : Subscription
where TE : Event
{
Expression<Func<Subscription, bool>> predicate = (x) => x.EventType == eventItem.EventType
&& x.IsActive;
predicate = predicate.And(x => subscriptionAction.Contains(x.Action));
if (!string.IsNullOrEmpty(eventItem.PayerNumber))
{
predicate = predicate.And(x => x.PayerNumber == eventItem.PayerNumber);
}
else if (!string.IsNullOrEmpty(eventItem.AccountNumber))
{
predicate = predicate.And(x => x.AccountNumber == eventItem.AccountNumber);
}
var result = await GetItemsAsync(predicate, o => o.PayerNumber);
return result.OfType<T>().Cast<T>().ToList();
}
}
Базовый класс:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class CosmoDBContainer : Attribute
{
public string Name { get; set; }
public string PartitionKey { get; set; }
}
[CosmoDBContainer(Name = "Subscription", PartitionKey = "PayerNumber")]
public class Subscription
{
[JsonProperty(PropertyName = "id", Order = 0)]
public Guid Id { get; set; }
}
Производный класс:
[CosmoDBContainer(Name = "Subscription", PartitionKey = "PayerNumber")]
public class CardBlockSubscription : Subscription
{
public override NotificationType NotificationType => NotificationType.CardBlock;
}
Вот метод вызова:
private async Task<List<CardBlockSubscription>> GetSubscriptions(CardBlockedEvent cardBlockedEvent)
{
var result = await _subscriptionRepository
.GetSubscriptions<CardBlockSubscription,CardBlockedEvent>(cardBlockedEvent, SubscriptionAction.UiNotification);
return result;
}
Stack Trace:
в System. Linq.Enumerable.d__63 1.MoveNext() at System.Collections.Generic.List
1..ctor (IEnumerable 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 источник)
Это потому, что я использую настраиваемый атрибут? вот почему я не могу ввести приведение к производному классу.
Есть мысли?