当前位置:  开发笔记 > 编程语言 > 正文

Lambda"无法从使用中推断"

如何解决《Lambda"无法从使用中推断"》经验,为你挑选了1个好方法。

我声明了以下字典:

private readonly Dictionary dictionary;

我有一个方法,导致编译器错误:

    public IQueryable Find(Func exp)
    {
        return  dictionary.Single(exp);
    }

我得到的错误是:

Error   1   The type arguments for method 'System.Linq.Enumerable.Single(System.Collections.Generic.IEnumerable, System.Func)' cannot be inferred from the usage. Try specifying the type arguments explicitly. C:\work\MSD-AIDS-Images\MSD-AIDS-Images-Test\TestImageRepository.cs 34  30  MSD-AIDS-Images-Test

我试过谷歌搜索,我似乎找不到任何关于我做错了什么的确定

编辑 - 这是星期一早上上班.

我打算把"在哪里",而不是单身

编辑2!

好的,代码现在是这样的:

public IQueryable Find(Func exp)
{
    return dictionary.Values.Where(exp);
}

现在我收到以下错误:

Error   1   Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Linq.IQueryable'. An explicit conversion exists (are you missing a cast?)    C:\work\MSD-AIDS-Images\MSD-AIDS-Images-Test\TestImageRepository.cs 34  20  MSD-AIDS-Images-Test

作为一个FYI,有实现接口的方法,声明是:

IQueryable Find(Func exp);

这比它应该更复杂!



1> Marc Gravell..:

你想做什么?例如,Single将返回一个实例T,而不是IQueryable(和对象,你应该可能正在使用IEnumerable)...

感觉就像你想要的:

public Image Find(Func predicate)
{
    return dictionary.Values.Single(predicate);
}

当然,您可以通过以下方式全局作为扩展方法:

(编辑包括Where来自问题编辑)

static class DictionaryExtensions
{
    public static TValue FindSingle(
        this IDictionary dictionary,
        Func predicate)
    {
        return dictionary.Values.Single(predicate);
    }
    public static IEnumerable Find(
        this IDictionary dictionary,
        Func predicate)
    {
        return dictionary.Values.Where(predicate);
    }
}

(我不确定调用者自己做这件事要困难得多)

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有