Official_Lusi

recursion/generic

Apr 23rd, 2025
483
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.71 KB | Software | 0 0
  1. public static class DtoFactory
  2. {
  3.     // todo versione 1
  4.  
  5.     public static EventoDto GetEvento(Evento evento)
  6.     {
  7.         return evento switch
  8.         {
  9.             Evento1 evento1 => Metodo1(evento1),
  10.             Evento2 evento2 => Metodo2(evento2),
  11.             Evento3 evento3 => Metodo3(evento3),
  12.             Evento4 evento4 => Metodo4(evento4),
  13.             Evento5 evento5 => Metodo5(evento5),
  14.             Evento6 evento6 => Metodo6(evento6),
  15.             // altri infiniti eventi e metodi
  16.             _ => throw new Exception("eccezione x")
  17.         };
  18.     }
  19.  
  20.     private static Evento1Dto Metodo1(Evento1 evento1)
  21.     {
  22.         return new Evento1Dto(
  23.             evento1.EventGuid,
  24.             evento1.EventName,
  25.             evento1.EventType,
  26.             evento1.EventTime
  27.             );
  28.     }
  29.     private static Evento2Dto Metodo2(Evento2 evento2)
  30.     {
  31.         return new Evento2Dto(
  32.             evento2.EventGuid,
  33.             evento2.EventName,
  34.             evento2.EventType,
  35.             evento2.EventTime
  36.             );
  37.     }
  38.     private static Evento3Dto Metodo3(Evento3 evento3)
  39.     {
  40.         return new Evento3Dto(
  41.             evento3.EventGuid,
  42.             evento3.EventName,
  43.             evento3.EventType,
  44.             evento3.EventTime
  45.             );
  46.     }
  47.     private static Evento4Dto Metodo4(Evento4 evento4)
  48.     {
  49.         return new Evento4Dto(
  50.             evento4.EventGuid,
  51.             evento4.EventName,
  52.             evento4.EventType,
  53.             evento4.EventTime
  54.             );
  55.     }
  56.     private static Evento5Dto Metodo5(Evento5 evento5)
  57.     {
  58.         return new Evento5Dto(
  59.             evento5.EventGuid,
  60.             evento5.EventName,
  61.             evento5.EventType,
  62.             evento5.EventTime
  63.             );
  64.     }
  65.     private static Evento6Dto Metodo6(Evento6 evento6)
  66.     {
  67.         return new Evento6Dto(
  68.             evento6.EventName,
  69.             evento6.EventGuid,
  70.             evento6.EventType,
  71.             evento6.EventTime
  72.             );
  73.     }
  74.    
  75.     // infiniti metodi ed eventi dto da creare
  76.  
  77.  
  78.     // todo versione 2
  79.     public static EventoDto GetEventoDto(Evento evento)
  80.     {
  81.         var type = evento.GetType();
  82.         if (_dtoFactories.TryGetValue(type, out var factory))
  83.             return factory(evento);
  84.  
  85.         throw new NotSupportedException("eccezione x");
  86.     }
  87.  
  88.     private static readonly Dictionary<Type, Func<Evento, EventoDto>> _dtoFactories = new Dictionary<Type, Func<Evento, EventoDto>>
  89.     {
  90.         [typeof(Evento1)] = e => CreateDefaultDto<Evento1, Evento1Dto>((Evento1)e),
  91.         [typeof(Evento2)] = e => CreateDefaultDto<Evento2, Evento2Dto>((Evento2)e),
  92.         [typeof(Evento3)] = e => CreateDefaultDto<Evento3, Evento3Dto>((Evento3)e),
  93.         [typeof(Evento4)] = e => CreateDefaultDto<Evento4, Evento4Dto>((Evento4)e),
  94.         [typeof(Evento5)] = e => CreateDefaultDto<Evento5, Evento5Dto>((Evento5)e),
  95.         [typeof(Evento6)] = e => CreateDefaultDto<Evento6, Evento6Dto>((Evento6)e)
  96.         // infiniti altri eventi e metodi
  97.     };
  98.  
  99.     private static TEventoDto CreateDefaultDto<TEvento, TEventoDto>(TEvento evento)
  100.     where TEvento : Evento
  101.     where TEventoDto : EventoDto
  102.     {
  103.         var ctor = typeof(TDto).GetConstructor(new Type[]
  104.         {
  105.             typeof(Guid), typeof(string), typeof(string), typeof(DateTime)
  106.         });
  107.  
  108.         return (TDto)ctor.Invoke(new object[]
  109.         {
  110.         evento.EventGuid,
  111.         evento.EventName,
  112.         evento.EventType,
  113.         evento.EventTime
  114.         });
  115.     }
  116. }
  117.  
  118. // esempio classe di evento
  119. public class Evento
  120. {
  121.     public Guid EventGuid { get; set; }
  122.     public string EventName { get; set; }
  123.     public string EventType { get; set; }
  124.     public DateTime EventTime { get; set; }
  125. }
  126.  
  127. public Class Evento1 : Evento
  128. {
  129.     public Evento1(Guid eventGuid, string eventName, string eventType, DateTime eventType) : base(eventGuid, eventName, eventType, eventType)
  130.     {
  131.     }
  132. }
  133. public Class Evento2 : Evento
  134. {
  135.     public Evento2(Guid eventGuid, string eventName, string eventType, DateTime eventType) : base(eventGuid, eventName, eventType, eventType)
  136.     {
  137.     }
  138. }
  139.  
  140. // ecc
  141.  
  142.  
  143. //esempio classe evento dto
  144. public class EventoDto
  145. {
  146.     public Guid EventGuid { get; set; }
  147.     public string EventName { get; set; }
  148.     public string EventType { get; set; }
  149.     public DateTime EventTime { get; set; }
  150. }
  151.  
  152. public Class Evento1Dto : EventoDto
  153. {
  154.     public Evento1Dto(Guid eventGuid, string eventName, string eventType, DateTime eventType) : base(eventGuid, eventName, eventType, eventType)
  155.     {
  156.     }
  157. }
  158. public Class Evento2Dto : EventoDto
  159. {
  160.     public Evento2Dto(Guid eventGuid, string eventName, string eventType, DateTime eventType) : base(eventGuid, eventName, eventType, eventType)
  161.     {
  162.     }
  163. }
  164.  
  165. //ecc
Tags: #csharp
Advertisement
Add Comment
Please, Sign In to add comment