Невозможно преобразовать базовый класс в производный класс с настраиваемым атрибутом - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь преобразовать базовый тип в производный тип с помощью «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 источник)

Это потому, что я использую настраиваемый атрибут? вот почему я не могу ввести приведение к производному классу.

Есть мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...