Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将泛型类传递给Method,该方法返回传递的同一类的泛型ObservableCollection_C#_Wpf_Generics_Observablecollection - Fatal编程技术网

C# 将泛型类传递给Method,该方法返回传递的同一类的泛型ObservableCollection

C# 将泛型类传递给Method,该方法返回传递的同一类的泛型ObservableCollection,c#,wpf,generics,observablecollection,C#,Wpf,Generics,Observablecollection,我正在使用WPF从数据库中提取数据,并使用多个不同的表进行操作,我在C#中将这些表建模为POCO。我希望能够创建一个足够灵活的方法来处理传入的任何POCO,然后将同一类的可观察集合返回给调用方 我已经设置了一些我还没有测试过的东西,但我知道这可能不是实现这一点的最佳方式,所以我想在我费心排除故障或尝试让它工作之前,就如何最好地实现这一点获得一些建议: public static ObservableCollection<object> SQLAuthentication(Obser

我正在使用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;
        }
公共静态ObservableCollection SQLAuthentication(ObservableCollection myCollection、对象myClass、字符串sql)
{
var conn=new SqlConnection();
var paramList=GenerateSQLParameters(myClass,null);
var tempModel=Global.GenerateNewInstance(myClass);
//获取类型
Type model=tempModel.GetType();
var prop=model.GetProperties();
房地产信息;
使用(获取连接(连接))
{
conn.Open();
SqlCommand命令cmd;
SqlDataReader;
cmd=新的SqlCommand(sql,conn);
reader=cmd.ExecuteReader();
while(reader.Read())
{
//为模型中的每个特性设置值
foreach(道具中的var p)
{
pi=tempModel.GetType().GetProperty(p.Name);
pi.SetValue(tempModel,reader[p.Name]);
}
myCollection.Add(tempModel);
}
reader.Close();
cmd.Dispose();
}
回采;
}

您可以在方法签名中使用泛型类型,而不需要使用对象集合。。。在我写这篇文章时,约翰·B一针见血

public static ObservableCollection<T> SQLAuthentication(ObservableCollection<T> myCollection, T myClass, String sql) where T: class
公共静态ObservableCollection SQLAuthentication(ObservableCollection myCollection,T myClass,String sql),其中T:class

@John,如果你把它作为答案发布,我会删除它,因为你确实是先从技术上说出来的,如果你这么做了,请留下评论我收到通知,听起来像是XY问题:你为什么不只是使用实体框架呢,或者任何其他ORMYou可以将其声明为
公共静态ObservableCollection SQLAuthentication(ObservableCollection myCollection,T myClass,String sql),其中T:class
@Aydin Adn是的,我很想,但不幸的是,这是一个公司项目,我们无法访问nuget。@克里斯托弗我不知道你的意思。我希望能够一般地查询数据库中的任何表,并为其返回值。还有什么我应该问的吗?不是想成为一个聪明的傻瓜,只是想了解你在汉克斯得到了什么!我试过了,但忘了为我的类添加T。回到C#中的一些东西……在过去的一年半里,我主要使用javascript/angular……实际上这几乎是正确的,但并不完全正确。它会抛出错误,直到您也在方法调用本身上加上:publicstaticobservecollectionsqlauthentication(observecollectionmycollection,tmyclass,stringsql),其中T:class起作用