接口和转换列表

时间:2009-06-02 00:25:59

标签: c#

为什么这不起作用,以及如何解决?

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转换为接口

4 个答案:

答案 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(我推断)