powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Список как копия списка родительского класса
20 сообщений из 20, страница 1 из 1
Список как копия списка родительского класса
    #39558906
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Как можно создать список элементов как копию списка родительского класса?
Я так понимаю можно с помощью Select перечислять все поля и прочее, а есть ли способ проще? Cast? OfType? ConvertAll?

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Animal> animals = new List<Animal>()
            {
                new Animal() { Name = "One", Age = 1 },
                new Animal() { Name = "Two", Age = 2 },
                new Animal() { Name = "Three", Age = 3 }
            };

            List<Cat> cats = ???
        }
    }

    public class Animal
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    public class Cat : Animal
    {
        public string Color { get; set; }
    }
}
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39558917
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cast.
Но смысл?????
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39558922
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cast у меня Exception выдает... OfType без ошибок, но список пустой.

Зачем? Есть готовый список значений, нужен второй такой же, но с дополнительным полем.
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39558934
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну то есть можно ли как-то обойтись без перечисления полей родительского класса:
Код: c#
1.
List<Cat> cats = animals.Select(x => new Cat() { Name = x.Name, Age = x.Age, Color = null }).ToList();


Чтобы не завязываться на них..
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39558948
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Cast у меня Exception выдает... OfType без ошибок, но список пустой.упс, неверно прочитал задачу. Естественно, OfType выдает пустоту, потому что нет Cat-ов, их нужно создавать принудительно.
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39558950
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя в зверинце 3 зверя, но кошек среди них нет
Именно по-этому:
Qwe.Qwe1Cast у меня Exception выдает... OfType без ошибок, но список пустой.
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39558987
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так в итоге как быть? )
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39558993
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Так в итоге как быть? ) Писать велосипед с рефлексией. Прикрутить (Auto|...)Mapper?
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39558998
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Ну то есть можно ли как-то обойтись без перечисления полей родительского класса:
Код: c#
1.
List<Cat> cats = animals.Select(x => new Cat() { Name = x.Name, Age = x.Age, Color = null }).ToList();



Чтобы не завязываться на них..
Сделать конструктор и передать в него другой объект. Но не знаю, тут будет ли работать.
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39559008
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Cast у меня Exception выдает... OfType без ошибок, но список пустой.

Зачем? Есть готовый список значений, нужен второй такой же, но с дополнительным полем.

Как только Вы объясните, как из слона сделать кота, мы легко найдем решение.
Пока слон в кошачью клетку у меня не влезает)
А вообще учим ООП:
Из базового класса невозможно получить наследника. Никак. Только конструктор, только хардкор.
Как вариант можно написать explicit конвертацию, но это все равно будет синтаксический сахар.
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39559014
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Qwe.Qwe1Ну то есть можно ли как-то обойтись без перечисления полей родительского класса:
Код: c#
1.
List<Cat> cats = animals.Select(x => new Cat() { Name = x.Name, Age = x.Age, Color = null }).ToList();



Чтобы не завязываться на них..
Сделать конструктор и передать в него другой объект. Но не знаю, тут будет ли работать.

Само по себе не будет. Если есть метод вроде Copy, то можно через него.
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39559041
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Addxвроде Copy,
Да. Или типа Obj.Assign
Какая то фабрика классов или Строитель.
Если Linq не дружит, то ручной маппинг неизбежен. Что тут плохого.
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39559061
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ICloneable.Clone()
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39559106
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ладно, раз уж пошла такая пьянка в пятницу: ))
Еще reflection, emit, сериализация - десериализация?
Extention к классу/object, explicit к преобразованию, extention к List<T>?
Кто больше? )

PS Что только люди не сделают, лишь бы не работать, свойства им лень копировать ;)
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39559115
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AddxPS Что только люди не сделают, лишь бы не работать, свойства им лень копировать ;)
))
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39559333
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AddxНу ладно, раз уж пошла такая пьянка в пятницу: ))
Еще reflection, emit, сериализация - десериализация?
Extention к классу/object, explicit к преобразованию, extention к List<T>?
Кто больше? )
Сериализация в XML, через XSLT добавить нужное поле, через XPATH собрать ноды этого поля, заполнить их нужными значениями, обратно десериализовать из XML в нужный тип )
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39561623
.NET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Qwe.Qwe1Ну то есть можно ли как-то обойтись без перечисления полей родительского класса:
Код: c#
1.
List<Cat> cats = animals.Select(x => new Cat() { Name = x.Name, Age = x.Age, Color = null }).ToList();



Чтобы не завязываться на них..
Сделать конструктор и передать в него другой объект. Но не знаю, тут будет ли работать.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
class Program
	{
		static void Main(string[] args)
		{
			var _animals = new List<Animal>()
			{
				new Animal() { Name = "One", Age = 1 },
				new Animal() { Name = "Two", Age = 2 },
				new Animal() { Name = "Three", Age = 3}
			};

			var _cats = _animals.Select(x => new Cat(x).ToString()).ToArray();
			Console.WriteLine(String.Join("\n", _cats));
			Console.ReadLine();
		}
	}

	public class Animal
	{
		public string Name { get; set; }
		public int Age { get; set; }
	}

	public class Cat : Animal
	{
		public Cat(Animal a)
		{
			this.Name = a.Name;
			this.Age = a.Age;
			this.Color = "Полосатый";
		}

		public string Color { get; set; }

		public override string ToString()
		{
			return String.Format(
				"Name - {0}, Age - {1}, Color - {2}", this.Name, this.Age, this.Color);
		}
	}
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39561626
.NET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Addx]Qwe.Qwe1Как вариант можно написать explicit конвертацию, но это все равно будет синтаксический сахар.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class Animal
	{
		public string Name { get; set; }
		public int Age { get; set; }

		public static explicit operator Cat(Animal a)
		{
			return new Cat() { Name = a.Name, Age = a.Age, Color = "В полоску" };
		}
	}

	public class Cat : Animal
	{
		public string Color { get; set; }

		public override string ToString()
		{
			return String.Format(
				"Name - {0}, Age - {1}, Color - {2}", this.Name, this.Age, this.Color);
		}
	}


Ошибка компиляции
авторAnimal.explicit operator Cat(Animal)': user-defined conversions to or from a derived class are not allowed
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39562017
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем городить всю эту ахинею, если объект не поддерживает интерфейс клонирования, то его нельзя клонировать. Точка. Если поддерживает, значит можно.
Вот такое "клонирование" может иметь тяжелые последствия, когда часть объекта будет доступа из 2 разных клонов
...
Рейтинг: 0 / 0
Список как копия списка родительского класса
    #39562116
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot .NET]Addxпропущено...

Ошибка компиляции
пропущено...


Да, тупанул, спасибо. Обойдемся без этого сахара. )
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Список как копия списка родительского класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]