以下是我正在尝试执行的代码:
public IList<IOperator> GetAll()
{
using (var c = new MyDataContext())
{
return c.Operators.ToList();
}
}
运算符实现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?)
如何将其转换为我需要的东西?
答案 0 :(得分:6)
尝试Cast<>()
方法:
return c.Operators.Cast<IOperator>().ToList();
答案 1 :(得分:4)
如果我将代码更改为以下内容:
public IList<IOperator> GetAll()
{
using (var c = new MyDataContext())
{
var operators = (from o in c.Operators
select o).Cast<IOperator>();
return operators.ToList();
}
}
它不仅可以编译,而且实际上有效!感谢你们朝着正确的方向努力。
答案 2 :(得分:0)
编辑:实际上,
return(List&lt; IOperator&gt;)c.Operators.ToList();
将不做这个伎俩。遗憾
答案 3 :(得分:0)
使用ConvertAll&lt;&gt;
http://msdn.microsoft.com/en-us/library/kt456a2y.aspx
例如:在这种情况下,TEntity必须是IBusinessUnit,但是是一个类,所以我在转换List<Operator> to List<IOperator>
时遇到同样的麻烦(假设操作员实现了IOperator)。
在你的情况下,就像你说的那样,运营商不会阻止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.
}