我声明了以下字典:
private readonly Dictionarydictionary;
我有一个方法,导致编译器错误:
public IQueryableFind(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 IQueryableFind(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,有实现接口的方法,声明是:
IQueryableFind(Func exp);
这比它应该更复杂!
你想做什么?例如,Single
将返回一个实例T
,而不是IQueryable
(和对象,你应该可能正在使用IEnumerable
)...
感觉就像你想要的:
public Image Find(Funcpredicate) { 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); } }
(我不确定调用者自己做这件事要困难得多)