为什么这不起作用,以及如何解决?
public interface ITheInterface
{
string a{get;set;}
string b{get;set;}
}
public class SomeObject: ITheInterface
{
string a{get;set;}
string b{get;set;}
...
}
public class SomeGroup
{
ITheInterface Result;
...
}
var results= from y in dc.Groups
where y.id==1
select new SomeGroup
{
Result= (from x in dc.Objects
select new SomeObject{... }
).SingleOrDefault(),
}
return results.ToList();
无法从类型System.Collections.Generic.List
转换为接口
答案 0 :(得分:1)
我认为您的问题出在Results.ToList()
来电?它会失败,因为ITheInterface
不支持ToList()
。您正在LINQ查询上调用SingleOrDefault()
,它会为您提供单个项目。在单个项目上调用ToList()
是没有意义的。
相反,如果您的代码如下所示:
IEnumerable<SomeObject> Results = from x in dc.Objects
select new SomeObject{... };
然后,Results.ToList()
将为您提供List<SomeObject>
。
如果你真正想要的是List<ITheInterface>
,你可以这样做:
Results.Cast<ITheInterface>().ToList()
答案 1 :(得分:0)
结果是一个单一的对象; ToList()仅适用于Enumerables。
您需要编写return new List { Results };
(这使用集合初始值设定项)或取消对SingleOrDefault
的调用,并将结果声明为IEnumerable<ITheInterface>
。
如果您只想要一个对象,为什么要返回一个List?
答案 2 :(得分:0)
除了其他答案之外,在实现接口时,必须将成员函数声明为public
:
public class SomeObject: ITheInterface
{
public string a{get;set;}
public string b{get;set;}
...
}
答案 3 :(得分:0)
你想说
SomeGroup result = results.SingleOrDefault()
return result;
这是因为你的方法的返回类型是SomeGroup
(我推断)