删除具有多种对象类型的冗余
Remove redundancies with multiple object types
我有一个函数可以从 SQLite 查询中选择一些属性。这个函数 returns 例如静态列表<Requests>
。它工作得很好,唯一的问题是我需要这个函数来操作许多不同的对象,比如 cnn.Query<Requests>
、cnn.Query<Responses>
,等等。所以我不想为 20 个不同的对象调用这个函数 20 次。
有人可以告诉我如何使这些 <Requests>
或 <Responses>
动态化,以便只调用一次函数吗?
两倍几乎相同的功能,我想减少到一个:
public static List<Requests> ReadRequests(SQLiteCommand command)
{
using (IDbConnection cnn = new SQLiteConnection(command.Connection))
{
var output = cnn.Query<Requests>("select * from Requests", new DynamicParameters());
return output.ToList();
}
}
public static List<Responses> ReadResponses(SQLiteCommand command)
{
using (IDbConnection cnn = new SQLiteConnection(command.Connection))
{
var output = cnn.Query<Responses>("select * from Requests", new DynamicParameters());
return output.ToList();
}
}
你可以做的是制作一个通用的class(参考这里的教程http://dotnetpattern.com/csharp-generics)。不过,您仍然需要每次都构建并调用 class。
例如:
public class GenericClass<T>
{
public List<T> ReadT(SQLiteCommand command)
{
using (IDbConnection cnn = new SQLiteConnection(command.Connection))
{
var output = cnn.Query<T>("select * from "+typeof(T).Name, new DynamicParameters());
return output.ToList();
}
}
}
P.S。还没有测试代码,所以只是作为参考。
我有一个函数可以从 SQLite 查询中选择一些属性。这个函数 returns 例如静态列表<Requests>
。它工作得很好,唯一的问题是我需要这个函数来操作许多不同的对象,比如 cnn.Query<Requests>
、cnn.Query<Responses>
,等等。所以我不想为 20 个不同的对象调用这个函数 20 次。
有人可以告诉我如何使这些 <Requests>
或 <Responses>
动态化,以便只调用一次函数吗?
两倍几乎相同的功能,我想减少到一个:
public static List<Requests> ReadRequests(SQLiteCommand command)
{
using (IDbConnection cnn = new SQLiteConnection(command.Connection))
{
var output = cnn.Query<Requests>("select * from Requests", new DynamicParameters());
return output.ToList();
}
}
public static List<Responses> ReadResponses(SQLiteCommand command)
{
using (IDbConnection cnn = new SQLiteConnection(command.Connection))
{
var output = cnn.Query<Responses>("select * from Requests", new DynamicParameters());
return output.ToList();
}
}
你可以做的是制作一个通用的class(参考这里的教程http://dotnetpattern.com/csharp-generics)。不过,您仍然需要每次都构建并调用 class。
例如:
public class GenericClass<T>
{
public List<T> ReadT(SQLiteCommand command)
{
using (IDbConnection cnn = new SQLiteConnection(command.Connection))
{
var output = cnn.Query<T>("select * from "+typeof(T).Name, new DynamicParameters());
return output.ToList();
}
}
}
P.S。还没有测试代码,所以只是作为参考。