c# – 将泛型传递给扩展方法

c# – 将泛型传递给扩展方法,第1张

概述我正在尝试创建一个通用的方法来执行一个查询,我可以传递存储的proc名称和参数(如果有的话). 执行查询后,结果存储在DataTable中 必须转换为List. DataTableToList() 是一种扩展方法,它将做同样的事情. 仅显示相关代码 呼叫者 var results= dh.ExecuteDataSet<EmployeeModel>("USP_GetEmployeeByID", n 我正在尝试创建一个通用的方法来执行一个查询,我可以传递存储的proc名称和参数(如果有的话).

执行查询后,结果存储在Datatable中
必须转换为List.

DatatableToList()

是一种扩展方法,它将做同样的事情.

仅显示相关代码

呼叫者

var results=  dh.ExecuteDataSet<EmployeeModel>("USP_GetEmployeeByID",new Dictionary<string,IConvertible>()        {                 {"@ID",1000}             });

DAL代码

public IEnumerable<T>  ExecuteDataSet<T>(string storedProcname,IDictionary<string,IConvertible> parameters = null)            {                                                var result = db.ExecuteDataSet(q);                    Datatable dtResult = result.tables[0];                    var t = dtResult.DatatableToList<T>();  //Compile time error: The type T must be a reference type in order to use it as parameter                         return t;                }

扩展方法

public static List<T> DatatableToList<T>(this Datatable table) where T : class,new()        {            try            {                List<T> List = new List<T>();                foreach (var row in table.AsEnumerable())                {                    T obj = new T();                    foreach (var prop in obj.GetType().GetPropertIEs())                    {                        try                        {                            PropertyInfo propertyInfo = obj.GetType().GetProperty(prop.name);                            propertyInfo.SetValue(obj,Convert.ChangeType(row[prop.name],propertyInfo.PropertyType),null);                        }                        catch                        {                            continue;                        }                    }                    List.Add(obj);                }                return List;            }            catch            {                return null;            }        }

问题是扩展方法调用给出了编译时错误

06003

那么对扩展方法进行哪些更改以使其接受泛型作为参数?

解决方法 这个程序:

public IEnumerable<T>  ExecuteDataSet<T>(    string storedProcname,IConvertible> parameters = null)

还需要类型参数.

where T : class,new()
总结

以上是内存溢出为你收集整理的c# – 将泛型传递给扩展方法全部内容,希望文章能够帮你解决c# – 将泛型传递给扩展方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存