Lea*_*ner 1 .net c# generics reflection c#-4.0
从我的C# 4.0代码中,我想在Sybase和上执行一些查询MSSQL.正在运行时将决定/知道正在使用(或将要使用)的数据库.
我使用AseCommand,并SqlCommand分别为Sybase和SQL.
我决定创建这样的泛型方法:
private Department ExecuteCommand<T>(T databaseCommand) where T : class
{
Department department = new Department ();
dynamic command = databaseCommand;
using (dynamic databaseReader = command.ExecuteReader())
{
if (databaseReader.HasRows)
{
while (databaseReader.Read())
{
department.Employees.Add(this.CreateDepartmentInstance(databaseReader));
}
}
}
command.Connection.Dispose();
return department;
}
Run Code Online (Sandbox Code Playgroud)
问题:
dynamic吗?dynamic呢?Ric*_*lly 11
你不一定需要动态,你需要的只是一个通用接口(在这个例子中它们都有):
private Department ExecuteCommand<T>(T databaseCommand) where T : IDbCommand
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,因为你没有做任何特别有趣的类型T(据我所知),以下方法签名就足够了:
private Department ExecuteCommand(IDbCommand databaseCommand)
Run Code Online (Sandbox Code Playgroud)
一般来说,如果没有通用接口,我建议使用Facade模式,并简单地将方法调用委托给实际实现中的等价物.