我试图使用具有泛型类型的IComparer。
以下代码会生成以下错误:"无法根据用法推断出类型参数。尝试明确指定类型参数。"
如果我从OrderBy调用中删除自定义比较器,那么代码编译并命令正常,但是我需要能够传入我的icomparer。 另外值得注意的是,如果我使用对象/字符串等类型但下面的代码有效,但当我尝试使用泛型类型时失败
public IQueryable<T> OrderResults<T, TU>(IQueryable<T> queryData, IComparer<TU> customComparer, string sortColumnName)
{
var sortPropertyInfo = queryData.First().GetType().GetProperty(sortColumnName);
return queryData.OrderBy(x => sortPropertyInfo.GetValue(x, null), customComparer);
}
答案 0 :(得分:2)
由GetValue(x,null)
返回System.Object
类型的事实导致您的代码段出现歧义。请尝试以下方法:
public IQueryable<T> OrderResults<T, TU>(IQueryable<T> queryData, IComparer<TU> customComparer, string sortColumnName)
{
var sortPropertyInfo = queryData.First().GetType().GetProperty(sortColumnName);
return queryData.OrderBy(x => (TU)sortPropertyInfo.GetValue(x, null), customComparer);
}
这至少没有编译时错误。如果您有一些用于测试的代码,我可以验证它是否有效....