Передача универсального класса в amethod, который возвращает универсальную коллекцию ObservableCollection того же класса, который был передан - PullRequest
0 голосов
/ 11 ноября 2018

Я работаю с извлечением данных из БД в WPF и делаю это с несколькими различными таблицами, которые я смоделировал как POCO в C #. Я хочу иметь возможность создать метод, который достаточно гибок для обработки любого из этих передаваемых POCO, а затем вернуть наблюдаемую коллекцию того же класса вызывающей стороне.

У меня есть кое-что настроенное, что я еще не тестировал, но я знаю, что это, вероятно, не лучший способ реализовать это, поэтому я хотел получить несколько советов о том, как лучше всего это сделать, прежде чем я даже удосужился устранить неполадки или попытаться чтобы заставить это работать:

 public static ObservableCollection<object> SQLAuthentication(ObservableCollection<object> myCollection, object myClass, String sql)
        {
            var conn = new SqlConnection();

            var paramList = GenerateSQLParameters(myClass, null);
            var tempModel = Global.GenerateNewInstance(myClass);

            //get the type
            Type model = tempModel.GetType();
            var prop = model.GetProperties();
            PropertyInfo pi;

            using (getConnection(conn))
            {
                conn.Open();
                SqlCommand cmd;
                SqlDataReader reader;

                cmd = new SqlCommand(sql, conn);
                reader = cmd.ExecuteReader();

                while (reader.Read())
                {

                    //set the values for each property in the model
                    foreach (var p in prop)
                    {
                        pi = tempModel.GetType().GetProperty(p.Name);
                        pi.SetValue(tempModel, reader[p.Name]);
                    }
                   myCollection.Add(tempModel);
                }
                reader.Close();
                cmd.Dispose();
            }

            return myCollection;
        }

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете использовать универсальные типы в сигнатуре самого метода, вам не нужно использовать коллекцию объектов ... и когда я пишу это, Джон Б ударил по гвоздю по голове

public static ObservableCollection<T> SQLAuthentication(ObservableCollection<T> myCollection, T myClass, String sql) where T: class

@ Джон, если вы отправите его как ответ, удалите его, так как сначала вы технически выкрикнули его, просто оставьте комментарий, если вы это сделаете, я получу уведомление

...