. net反射调用带有泛型参数的函数-如何将类型传递给函数



嘿,这是我的第一个问题!我真的很纠结下面这些代码:

我有这些类:

public class Home {
    public List<Parameter> Parameter { get; set; }
}

我也有一个这样规格的函数:

public static List<T> DataTableMapToList<T>(DataTable dtb)
    { ... }

在另一个类中当我需要调用这些函数时,我需要传递我的类的类型但我在反射属性循环中:

public void Initialize(ref object retObject)
    {
        using (var db = this)
        {
            db.Database.Initialize(force: false);
            var cmd = db.Database.Connection.CreateCommand();
            cmd.CommandText = sStoredProcedure;
            try
            {
                // Run the sproc
                db.Database.Connection.Open();
                DbDataReader reader = cmd.ExecuteReader();
                DataSet ds = new DataSet();
                ds.EnforceConstraints = false;
                ds.Load(reader, LoadOption.OverwriteChanges, sTables);
                var propertys = GetGenericListProperties(retObject);
                foreach (DataTable table in ds.Tables) {
                    foreach (var info in propertys)
                    {
                        if (info.Name == table.TableName)
                        {
                            Type myObjectType = info.PropertyType;
                            // Create an instance of the list
                            var list = Activator.CreateInstance(myObjectType);
                            var list2 = DataTableMapToList<???>(table).ToList();
                            //Where the variable myObjectType is the TYPE of the class where I need to pass on the ??? marker
                            info.SetValue(retObject, list, null);
                        }
                    }
                }
            }
            finally
            {
                db.Database.Connection.Close();
            }
        }
    } 

地点:retObject -> Home的实例;info -> Home。Parametro财产;

我想通过反射动态设置属性。一切都在工作,而不需要调用泛型类型的函数。但是我需要调用函数来正确地填充属性。

我什么都试过了:

作为对象传递并尝试转换后(我得到一个错误的IConverter必须实现);

试图把我所有的代码-只是为了测试-的DataTableMapToList(),即使如此,我得到了对象转换的错误;

为我的最终变量强制发送列表,但我有转换器错误。;

我不知道我是否足够清楚我真正需要什么,但我花了大约4个小时寻找一个解决方案,直到知道。

给定有一个静态泛型函数的类:

public static class Utils
 {
    public static List<T> DataTableMapToList<T>(DataTable dtb)
    { ... }
 }

可以通过反射调用:

 IEnumerable InvokeDataTableMap(DataTable dtb, Type elementType)
 {
       var definition = typeof(Utils).GetMethod("DataTableMapToList");
       var method = definition.MakeGenericMethod(elementType);
       (IEnumerable) return method.Invoke(null, new object[]{dtb});
 }

相关内容

  • 没有找到相关文章

最新更新