对于这种操作如此微不足道的事情,我想我只会做:
var modelbs = modelas.Select(
a => new Viewmodelb(){
Name = a.Name,Surname = a.Surname
}
);
您可以使两个视图模型都从其中具有名称和姓氏的基类继承,尽管请注意,这不允许您将modela转换为modelb,只能将modela转换为基类。
或者您可以在modelb中提供一个构造函数,该构造函数接受modela对象并从中拉出名称/姓氏,并像这样使用它:
var modelbs = modelas.Select(
a => new Viewmodelb(a)
);
您的类ViewmodelB看起来像:
public class ViewmodelB {
public string Name { get; set; }
public string Surname { get; set; }
public string Work { get; set; }
public string Address { get; set; }
public ViewmodelB(ViewmodelA x){
Name = x.Name;
Surname = x.Surname;
//maybe initialize other properties here
}
}
,
您将无法将ViewmodelA
投射到ViewmodelB
。
我想到的头几个选择是:
- 使两个类都继承自同一个基类,
- 使两个类都实现一个接口,
- 创建
A
和B
之间的转换机制。
,
以下是@tymtam answer
的示例
-
使两个类都从相同的基类继承
-
使两个类都实现一个接口
-
创建A与B之间的转换机制
{
/// <summary>
/// Using the same base class
/// </summary>
public class BaseClass
{
public string Property { get; set; }
}
public class ViewModelA : BaseClass
{
public string Property { get; set; }
}
public class ViewModelB : BaseClass
{
public string Property { get; set; }
}
/// <summary>
/// Using the same interface
/// </summary>
public interface BaseInterface
{
string Property { get; set; }
}
public class ViewModelA : BaseInterface
{
public string Property { get; set; }
}
public class ViewModelB : BaseInterface
{
public string Property { get; set; }
}
/// <summary>
/// Create a conversion mechanism. This can be done in either in ViewModelA or ViewModelB
/// </summary>
public class ViewModelA
{
public string Property { get; set; }
public static implicit operator ViewModelA(ViewModelB model) => new ViewModelA { Property = model.Property };
public static implicit operator ViewModelB(ViewModelA model) => new ViewModelB { Property = model.Property };
}
public class ViewModelB
{
public string Property { get; set; }
}
,
您只能这样做:
IEnumerable<ViewmodelB> newList = demoService.GetList().Select(a => SomeMethodCreatingBFromA(a));
SomeMethodCreatingBFromA
可以是任何东西-可以调用构造函数,AutoMapper。没有使用AutoMapper太多,但是我想它有一个在集合之间转换的方法。
,
如果只想使用公共属性,请创建一个基类或接口,在其中定义公共属性并从中派生两个类。然后,您可以使用基类或接口。
本文链接:https://www.f2er.com/3075704.html