Loading...
yanchev.ilian avatar yanchev.ilian 24 Точки

C# OOP Retake Exam - 22 August 2020

Здравейте,

Бих се радвал ако някой колега помогне с решаването на следния казус:

Как се имплементира логиката на метода public T GetByName(string name) в класа Repository, който имплементира интерфейса IRepository<T>, наследен метод е, в останалите Repo-та (CarRepository, DriverRepository и RaceRepository) ми е ясно и съм го направил.

Прикачвам снимка към моята имплементация на останалите методи -> https://ibb.co/MSZ3DS0

Условие -> https://ibb.co/wL9Whk4

Тук е цялата 1-ва задача -> https://judge.softuni.org/Contests/Practice/Index/2528#0

 

 

Благодаря предварително!

Поздрави,

Илиян Янчев

Тагове:
0
C# OOP Advanced 28/03/2022 09:57:32
yanchev.ilian:
Казуса е решен!

I got the right answer!
Axiomatik avatar Axiomatik 2422 Точки
Best Answer
namespace EasterRaces.Repositories.Entities
{
    using System;
    using System.Linq;
    using System.Collections.Generic;

    using EasterRaces.Repositories.Contracts;
    using EasterRaces.Models.Drivers.Contracts;
    using EasterRaces.Models.Races.Contracts;

    public class RaceRepository : IRepository<IRace>
    {
        private ICollection<IRace> races;

        public RaceRepository()
        {
            this.races = new List<IRace>();
        }

        public void Add(IRace model)
        {
            this.races.Add(model);
        }

        public IReadOnlyCollection<IRace> GetAll()
        {
            return (IReadOnlyCollection<IRace>)this.races;
        }

        public IRace GetByName(string name)
        {
            return this.races.FirstOrDefault(m => m.Name == name);
        }

        public bool Remove(IRace model)
        {
            return this.races.Remove(model);
        }
    }
}

 

0
yanchev.ilian avatar yanchev.ilian 24 Точки

Аз имах впредвид как се имплементира логиката на метода GetByName от Т в класа Repository<T>, който имплементира интерфейса IRepository<T>. 

-> https://ibb.co/jyLQwFk

Надявам се да си ме разбрал.

0
29/03/2022 20:26:31
Axiomatik avatar Axiomatik 2422 Точки

StackOverflow:

The problem is that your compiler does not know that objects of type T has properties QualificationId and ProductId. You somehow have to tell it to the compiler.

public void MyFunct<T>(List<T> objectList) where T: IMyInterface
{
    // here you know that any T implements IMyInterface,
    // and thus you can get QualificationId and ProductId

     List<T> list = objectList
        .Where(listElement => listElement.QualificationID == setName).ToList();
    redisClient.SetAdd<string>("Qualification:" + setName, 
        list.Select(listElement => listElement.ProductID).ToString());
}



Other way which is not common and extremely slow is to check for the types at runtime.

public static IEnumerable<TResult> GetNonNonVerifiedPersons<TResult>(Person<TResult> model)
{
    var list = model.PersonList;
    var t = list.FirstOrDefault() as Teacher;
    if (t != null)
    {
        return model.PersonList.Where(x => !(x as Teacher).IsVerified);
    }

    var s = list.FirstOrDefault() as Student;
    if (s != null)
    {
        return model.PersonList.Where(x => !(s as Student).IsVerified);
    }

    return null;
}

 

Models -> Contracts -> BaseClass with property Name for Linq query on this._models

https://stackoverflow.com/questions/43715964/how-to-query-a-listt-using-linq

https://stackoverflow.com/questions/33772034/how-to-write-linq-query-on-generic-list

0
29/03/2022 22:12:08
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.