将通用 class 传递给 returns 传递的相同 class 的通用 ObservableCollection 的方法
Passing generic class to amethod that returns a generic ObservableCollection of the same class that is passed
我正在使用 WPF 中的数据库从数据库中提取数据,并使用多个不同的表进行处理,我在 C# 中将其建模为 POCO。我希望能够创建一个足够灵活的方法来处理传入的任何这些 POCO,然后 return 一个相同 class 的可观察集合给调用者。
我设置了一些我还没有测试过的东西,但我知道这可能不是实现它的最佳方法所以我想在我什至费心进行故障排除之前就如何最好地做到这一点获得一些建议或试图让它工作:
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;
}
您可以在方法签名中使用泛型类型,您不需要使用对象集合...当我写这篇 John B 时,一针见血
public static ObservableCollection<T> SQLAuthentication(ObservableCollection<T> myCollection, T myClass, String sql) where T: class
@John,如果你 post 将它作为答案,我会删除它,因为你确实首先在技术上大声疾呼,如果你这样做,请发表评论,我会收到通知
我正在使用 WPF 中的数据库从数据库中提取数据,并使用多个不同的表进行处理,我在 C# 中将其建模为 POCO。我希望能够创建一个足够灵活的方法来处理传入的任何这些 POCO,然后 return 一个相同 class 的可观察集合给调用者。
我设置了一些我还没有测试过的东西,但我知道这可能不是实现它的最佳方法所以我想在我什至费心进行故障排除之前就如何最好地做到这一点获得一些建议或试图让它工作:
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;
}
您可以在方法签名中使用泛型类型,您不需要使用对象集合...当我写这篇 John B 时,一针见血
public static ObservableCollection<T> SQLAuthentication(ObservableCollection<T> myCollection, T myClass, String sql) where T: class
@John,如果你 post 将它作为答案,我会删除它,因为你确实首先在技术上大声疾呼,如果你这样做,请发表评论,我会收到通知