【发布时间】:2019-01-28 09:41:35
【问题描述】:
我了解以下解决方案可以正常工作,但它似乎不适用于收集。如果我尝试在构造函数中将IList<Something> 分配给IList<ISomething>,则获取“无法将类型System.Collections.Generic.IList<Something> 隐式转换为System.Collections.Generic.IList<ISomething>。存在显式转换(您是否缺少演员表?)”。有什么建议吗?
工作代码:
public class Foo
{
public int Number { get; private set; }
public ISomething IsSomething { get; private set; }
public Foo(int number, Something concreteType)
{
Number = number;
IsSomething = concreteType;
}
}
无效:
public class Foo
{
public int Number { get; private set; }
public IList<ISomething> IsSomething { get; private set; }
public Foo(int number, IList<Something> concreteType)
{
Number = number;
IsSomething = concreteType; //getting error
}
}
ConvertAll 似乎解决了这个问题。
【问题讨论】:
-
我根本看不到您在哪里使用列表。无论如何,
IList<Derived>根本不是IList<Base>。想象一下:您可以强制转换为基类列表并将AnotherDerivedClass的实例添加到该列表中:((ILlist<ISomething>)myList).Add(new MyEvilType())。现在你会有一个不同类型的列表。我怀疑这就是你想要的,是吗? -
如果我将 ctor 编码为:public Foo(int number, IList
somethings) 并将 Foo 创建为: Foo foo = new Foo(1, new List (){ new Something()}); -
您的问题是标题中的错误还是正文中的错误?他们是不同的。您的代码支持问题正文中的错误,但不支持标题中的错误。请澄清您在此处实际询问的内容。
-
当我不使用构造函数时出现标题错误(即无法创建类型的实例。类型是接口或抽象类,无法实例化)。当我尝试使用构造函数并分配时,我得到“无法将类型 System.Collections.Generic.IList
隐式转换为 System.Collections.Generic.IList 。存在显式转换(您是否缺少演员表?)” IsSomething = 具体类型。希望这很清楚。
标签: c# asp.net rest asp.net-web-api automapper