Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2014, 15:41   #1
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию C#, дженерики, рефлекшн.

Дупоустим есть такой класс:
Код:
class A{
  List<Entity1> EntityList1{get; private set;}
  List<Entity2> EntityList2{get; private set;}
  List<Entity2> EntityList3{get; private set;}
  List<Entity1> EntityList4{get; private set;}
}
как в конструкторе проинициализировать в цикле эти свойства?
инициализация только в конструкторе.
проблема именно в том, как создать список, если я не знаю какого именно типа он будет.
для меня это кжется нереальным, но Entity Framework так делает и я так ж хочу)
D][mon вне форума Ответить с цитированием
Старый 23.12.2014, 16:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://msdn.microsoft.com/ru-ru/libr...v=vs.110).aspx
например с помощью этого.
+ у любого типа легко вызвать конструктор без параметров.

вам бы про рефлексию почитать.

кстати, не припомню чтоб EF сам иницилизирвал.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.12.2014, 16:40   #3
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию

а мне и не надо параметры, мне нужно как-то создать List<хрен_знает_чего_>()
тоесть я буду знать чего, но лишт на этапе исполнения, и как сделаить это я не понимаю
D][mon вне форума Ответить с цитированием
Старый 23.12.2014, 18:23   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там все проще, вы получаете тип свойства, он уже подготовленный тип от List<Entity1>, его и создаете.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 23.12.2014 в 18:39.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.12.2014, 11:10   #5
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию

да, большое спасибо. проблема правда еще не решена до конца: я не знаю конструктор какого производного от List(в данном случае) мне нужно вызвать.
но покурив литературу (опять же, спасибо за совет ) решил, что могу передать в конструктор имя нужного типа, и использовать System.Type.GetType(string)
D][mon вне форума Ответить с цитированием
Старый 24.12.2014, 15:01   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Господи...
Цитата:
я не знаю конструктор какого производного от List(в данном случае) мне нужно вызвать.
у свойства EntityList4 тип List<Entity1>, вы рефлексией получите именно этот тип, не просто List<T>, а именно List<Entity1>
Код:
using System;
using System.Collections.Generic;
using System.Linq;

namespace Test1
{
    class A
    {
        public List<string> EntityList1 { get; set; }
        public List<int> EntityList2 { get; set; }
        public List<double> EntityList3 { get; set; }
        public List<long> EntityList4 { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var a = new A();
            foreach (var prop in a.GetType().GetProperties())
            {
                var obj = Activator.CreateInstance(prop.PropertyType);
                prop.SetValue(a, obj, null);
                Console.WriteLine(prop.GetValue(a,null));//для проверки
            }
        }
    }
}
вот и все, объект иницилизирован пустыми списками.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск