4

这是我试图做的代码:

public IList<IOperator> GetAll()
{
      using (var c = new MyDataContext())
      {
          return c.Operators.ToList();
      }
}

Operator 实现了 IOperator,但出现以下编译错误:

Cannot implicitly convert type 'System.Collections.Generic.List<MyProject.Core.Operator>' to 'System.Collections.Generic.IList<MyProject.Core.Model.IOperator>'. An explicit conversion exists (are you missing a cast?)

我如何施放这个以获得我需要的东西?

4

4 回答 4

6

试试Cast<>()方法:

return c.Operators.Cast<IOperator>().ToList();
于 2008-09-25T16:12:46.260 回答
4

如果我将代码更改为以下内容:

public IList<IOperator> GetAll()
{
      using (var c = new MyDataContext())
      {
           var operators = (from o in c.Operators
                            select o).Cast<IOperator>();

           return operators.ToList();
      }
}

它不仅可以编译,而且可以实际工作!感谢您朝正确方向轻推。

于 2008-09-25T16:29:12.257 回答
0

编辑:实际上,

return (List< IOperator >)c.Operators.ToList();

不会成功。对不起

于 2008-09-25T16:13:25.540 回答
0

使用 ConvertAll<>

http://msdn.microsoft.com/en-us/library/kt456a2y.aspx

eg:在这种情况下,TEntity 必须是一个 IBusinessUnit,但是是一个类,所以我在转换时遇到了同样的麻烦List<Operator> to List<IOperator>(假设 Operator 实现了 IOperator)。

在您的情况下,就像您说的那样,Operator 不会影响 IOperator,但这没关系-这仍然有效-

 public static IList<IBusinessUnit> toIBusinessUnitIList(List<TEntity> items)
      {

      return items.ConvertAll<IBusinessUnit>(new Converter<TEntity, IBusinessUnit>(TEntityToIBuisinessUnit));
      }

  /// <summary>
  /// Callback for List<>.ConvertAll() used above.
  /// </summary>
  /// <param name="md"></param>
  /// <returns></returns>
  private static IBusinessUnit TEntityToIBuisinessUnit(TEntity te)
  {
   return te;  // In your case, do whatever magic you need to do to convert an Operator to an IOperator here.
  }
于 2010-01-15T01:04:01.323 回答