Задать вопрос
TheTalion
@TheTalion

Поиск по листу базового класса объекта класса наследника, как реализовать?

Не могу понять, как выполнять поиск не по базовому классу, а классу наследнику.

Пример:
public class GameObject //базовый класс
	{
		public int m_perem;
		public GameObject(int _perem)
		{_perem= m_perem;}

public class Mouse : GameObject // класс наследник
	{
		public int m_conId;
		
		public Mouse( int _perem, int _conId): base (_perem)
		{m_conId = _conId;} }


Теперь тело с листом:
public class Main
	{
		public static void Main()
		{
var m_gameObjectList = new List<GameObject>(); //создаю типизированный лист с объектами базового класса
m_gameobjlist.Add(new Mouse(_perem, m_conId));//добавляю новый объект-наследник
m_gameobjlist.Find((GameObject x) => x._perem.Equals(что-то тут) );// так - поиск работает
m_gameobjlist.Find((Mouse x) => x._perem.Equals(что-то тут) );// а вот так уже ошибка 
//невозможно преобразовать лямбда выражение в тип делегата "Predicate<GameObject>", так как типы параметров не совпадают с типами параметров делегата 
}
}


Как сделать так, чтобы программа поняла, что мне нужно искать по объекту класса Mouse и сравнила предикатор GameObject с Mouse?
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Как то так. НО! Если у вас логика основана на определении типов - что-то не то в архитектуре.
class A
    {
        public virtual int AProp { get; } = 1;
    }

    class B : A
    {
        public override int AProp { get; } = 2;
    }
    class C : A
    {
        public override int AProp { get; } = 3;
    }
    class Program
    {
        static void Main(string[] args)
        {
            var aList = new List<A>(Enumerable.Repeat(new C(), 10));
            aList.AddRange(Enumerable.Repeat(new B(), 10));
            var a = aList.FirstOrDefault(x => x is B);
            var b = (B) a;
        }
    }
}
Ответ написан
@MonkAlex
C#, SQL, Delphi, C++ etc
Используйте OfType, тогда поиск будет только по наследникам определенного типа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы