C# - 动态执行和确定 Class 调用

C# - Executing and Determining Class Calls Dynamically

我正在尝试创建一个应用程序,它将动态生成内联 SQL 查询语句并传回各种对象。我创建的每个对象 class 都有一个 IRowMapper< ObjectName > GetMapping 方法。

我执行 SQL 并使用以下命令生成对象结果列表,对于我的示例,我将使用一个 Person 对象:

result.List = new List<Object>(db.ExecuteSqlStringAccessor<Person>(sql, Person.GetMapping()).ToList());

不过,我会有几个不同的对象 return 类型,而不仅仅是 Person。我想知道是否可以从字符串中动态获取 class 并调用 ExecuteSQLStringAccessor。例如,像这样:

Type type = Type.GetType("MyClass", true);

result.List = new List<Object>(db.ExecuteSqlStringAccessor<type>(SSUDBHelper.OpenQueryRequest(sql, assoc), type.GetMapping()).ToList());

非常感谢任何帮助,谢谢!

更新

我能做这个吗:

result.List = new List<Object>(db.ExecuteSqlStringAccessor<Person>(sql, Person.GetMapping()).ToList());

result.List = new List<Object>(db.ExecuteSqlStringAccessor<Company>(sql, Company.GetMapping()).ToList());

result.List = new List<Object>(db.ExecuteSqlStringAccessor<Invoice>(sql, Invoice.GetMapping()).ToList());

通用?

由于GetMapping是一个静态方法,我们别无选择,只能使用反射在运行时解决它:

IEnumerable<T> GetAsListOf<T>(string sql, YourDBType db) {
    IRowMapper<T> mapper = (IRowMapper<T>)typeof(T).GetMethod("GetMapping").Invoke(null, null);
    return db.ExecuteSqlStringAccessor<T>(sql, mapper);
}