下面是我的DTO。
public class Movie
{
public int Id {get; set;}
public string Name {get; set;}
public IEnumerable<BasicTicket> Tickets { get; set;}
}
这是BasicTicket类型的票证的多种类型
public class BasicTicket
{
public int Id {get; set;}
public bool IsSpecial { get; set;}
public bool IsDicount{get; set;}
public decimal Price { get; set;}
}
public class SpecialTicket : BasicTicket
{
public string SpecialProp1 {get; set;} //n such properties where n could be the range of 2 to 10
}
public class DiscountTicket : BasicTicket
{
public string SomeProp1 {get; set;} //n such properties where n could be the range of 2 to 10
}
&依此类推
现在基于电影中存在的布尔属性,要相应地初始化票证的集合。
一种这样的尝试:-
public IEnumerable<BasicTicket> Tickets {
get { return Tickets;}
set
{
if(this.IsSpecial)
{
value = new List<SpecialTicket >();
}
else
{
value = new List<BasicTicket>();
}
}
但是这样做时,我调试时没有看到任何错误消息,只是调试停止了
实际上,所有这些都是API的DTO。所以也尝试了这个。
WebAPI Controller
public class MovieController : ControllerBase
{
public IActionResult Post([FromBody]Movie movie)
{
if(movie.IsSpecial)
{
var tickets = movie.Tickets;
movie.Tickets = new List<SpecialTicket>();
movie.Tickets = tickets; // Throws error or doesn't get the values of the props present in TicketSpecial
movie.Tickets = tickets;
}
}
private bool SomeMethod(IEnumerable<TicketSpecial> tickets)
{
}
}
而且,想知道使用ExpandoObject快速向BasicTicket添加属性(如果n = 2或3)是否好?
我认为会有一些设计模式可以正确地解决此对象的创建问题,但尚未找到任何东西。
谢谢!
您的财产实施是错误的。此实现将导致get
访问器中出现StackOverflowException(可能是为什么调试器停止而没有向您显示任何错误的原因),并导致set
访问器中出现nop。