我在实现IFoo
的类中有一个对象集合作为属性。我想添加一种方法,用于按类型和谓词(特定于具体实现)从集合中检索项目。我的问题是我无法从接口定义的集合中向下转换到我的具体类(无法从用法推断类型),像这样:
public HashSet<IFoo> Foos { get; } = new HashSet<IFoo>();
public T GetFoo<T>(Func<T, bool> predicate) where T : class
{
if (Foos != null && predicate != null)
{
var foos = Foos.Where(f => f is T);
return foo = foos.FirstOrDefault(predicate);
}
return null;
}
我该怎么做?
答案 0 :(得分:2)
由于您的HashSet
的类型为IFoo
,因此您的谓词也应使用IFoo
。完成此操作的最简单方法是更改方法的签名:
public IFoo GetFoo<T>(Func<IFoo, bool> predicate) where T: IFoo, class
答案 1 :(得分:0)
找到了解决方案。我正在谓词和我实际使用的其他地方中检索IFoo并进行向下转换,但在检索时不这样做:
public IFoo GetFoo<T>(Func<IFoo, bool> predicate) where T : class
{
if (Foos != null && predicate != null)
{
var foos = Foos.Where(f => f is T);
return foos.FirstOrDefault(predicate);
}
return null;
}