Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Список как копия списка родительского класса / 20 сообщений из 20, страница 1 из 1
24.11.2017, 12:16
    #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
24.11.2017, 12:28
    #39558917
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
Cast.
Но смысл?????
...
Рейтинг: 0 / 0
24.11.2017, 12:31
    #39558922
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
Cast у меня Exception выдает... OfType без ошибок, но список пустой.

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


Чтобы не завязываться на них..
...
Рейтинг: 0 / 0
24.11.2017, 12:55
    #39558948
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
Qwe.Qwe1Cast у меня Exception выдает... OfType без ошибок, но список пустой.упс, неверно прочитал задачу. Естественно, OfType выдает пустоту, потому что нет Cat-ов, их нужно создавать принудительно.
...
Рейтинг: 0 / 0
24.11.2017, 12:57
    #39558950
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
У тебя в зверинце 3 зверя, но кошек среди них нет
Именно по-этому:
Qwe.Qwe1Cast у меня Exception выдает... OfType без ошибок, но список пустой.
...
Рейтинг: 0 / 0
24.11.2017, 13:32
    #39558987
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
Так в итоге как быть? )
...
Рейтинг: 0 / 0
24.11.2017, 13:37
    #39558993
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
Qwe.Qwe1Так в итоге как быть? ) Писать велосипед с рефлексией. Прикрутить (Auto|...)Mapper?
...
Рейтинг: 0 / 0
24.11.2017, 13:41
    #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
24.11.2017, 13:51
    #39559008
Addx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
Qwe.Qwe1Cast у меня Exception выдает... OfType без ошибок, но список пустой.

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

Как только Вы объясните, как из слона сделать кота, мы легко найдем решение.
Пока слон в кошачью клетку у меня не влезает)
А вообще учим ООП:
Из базового класса невозможно получить наследника. Никак. Только конструктор, только хардкор.
Как вариант можно написать explicit конвертацию, но это все равно будет синтаксический сахар.
...
Рейтинг: 0 / 0
24.11.2017, 13:54
    #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
24.11.2017, 14:20
    #39559041
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
Addxвроде Copy,
Да. Или типа Obj.Assign
Какая то фабрика классов или Строитель.
Если Linq не дружит, то ручной маппинг неизбежен. Что тут плохого.
...
Рейтинг: 0 / 0
24.11.2017, 14:51
    #39559061
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
ICloneable.Clone()
...
Рейтинг: 0 / 0
24.11.2017, 15:53
    #39559106
Addx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
Ну ладно, раз уж пошла такая пьянка в пятницу: ))
Еще reflection, emit, сериализация - десериализация?
Extention к классу/object, explicit к преобразованию, extention к List<T>?
Кто больше? )

PS Что только люди не сделают, лишь бы не работать, свойства им лень копировать ;)
...
Рейтинг: 0 / 0
24.11.2017, 16:13
    #39559115
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
AddxPS Что только люди не сделают, лишь бы не работать, свойства им лень копировать ;)
))
...
Рейтинг: 0 / 0
25.11.2017, 04:24
    #39559333
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
AddxНу ладно, раз уж пошла такая пьянка в пятницу: ))
Еще reflection, emit, сериализация - десериализация?
Extention к классу/object, explicit к преобразованию, extention к List<T>?
Кто больше? )
Сериализация в XML, через XSLT добавить нужное поле, через XPATH собрать ноды этого поля, заполнить их нужными значениями, обратно десериализовать из XML в нужный тип )
...
Рейтинг: 0 / 0
29.11.2017, 21:59
    #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
29.11.2017, 22:07
    #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
30.11.2017, 15:36
    #39562017
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
зачем городить всю эту ахинею, если объект не поддерживает интерфейс клонирования, то его нельзя клонировать. Точка. Если поддерживает, значит можно.
Вот такое "клонирование" может иметь тяжелые последствия, когда часть объекта будет доступа из 2 разных клонов
...
Рейтинг: 0 / 0
30.11.2017, 17:32
    #39562116
Addx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список как копия списка родительского класса
[quot .NET]Addxпропущено...

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


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


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