custom icomparer error - 无法从用法中推断出类型参数

时间:2015-08-28 14:25:33

标签: c# .net linq generics icomparer

我试图使用具有泛型类型的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);
}

1 个答案:

答案 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);
}

这至少没有编译时错误。如果您有一些用于测试的代码,我可以验证它是否有效....