将通用类传递给方法,该方法返回与传递的类相同的通用ObservableCollection

时间:2018-11-10 21:34:58

标签: c# wpf generics observablecollection

我正在使用WPF从数据库中提取数据,并使用多个不同的表来处理数据,这些表在C#中已建模为POCO。我希望能够创建一种足够灵活的方法来处理传入的任何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 :(得分:1)

您可以在方法自身的签名中使用泛型类型,您无需使用对象集合...而在撰写此约翰B消息时,我就大吃一惊

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

@John,如果您将其发布为答案不当,请删除它,因为您首先在技术上大喊了它,如果这样做,请在评论中留言