如何对列表进行类型划分?

Ram*_*Ram 2 .net c#

我在第三方DLL中有一个类.

Class A
{

}
Run Code Online (Sandbox Code Playgroud)

我需要装饰它,所以我创建了它的本地实例并使用它

class B
{

}
Run Code Online (Sandbox Code Playgroud)

DLL包含一个函数,它给出了A的列表.但是如果我尝试使用它如下

B listofB = Dll.FindAllA()
Run Code Online (Sandbox Code Playgroud)

我得到错误,不能隐式地将DLL.A转换为Proj.B

这两个类的结构没有区别.我怎么转换它?

Mar*_*ell 5

如果A并且B没有任何共同点(除非它们看起来相同),编译器运气不好.选项:

  • 继承(有时)
  • 将转换运算符添加到任一类型
  • ToA如果类型不在您的控件之外,请添加等扩展方法
  • 尝试使用automapper
  • 使用序列化(有一些方法可以使一些序列化程序使用不同的名称等)

我会首先选择前两个选项.请注意,List<T>您可以使用convert all,即:

List<A> orig = ...
List<B> copy = orig.ConvertAll(a => (B)a);// assumes a conversion operator exists
Run Code Online (Sandbox Code Playgroud)

对于其他类型,LINQ Select方法相当于ConvertAll.