comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Mapper para Entidades [C#]

  • 0 Respuestas
  • 1657 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado xxneeco83xx

  • *
  • Underc0der
  • Mensajes: 46
  • Actividad:
    0%
  • Reputación 0
  • ASM/C/C++/VB/Delphi
    • Ver Perfil
    • Email
  • Skype: nico.buzzi
« en: Julio 29, 2016, 07:48:40 pm »
Que tal ! llevo mucho tiempo desde la ultima vez que ingrese aquí y compartí algo, con el tema de que ocurrieron muchos cambios en estos últimos meses y demás, se hizo dificil.
Les dejo un Mapper que desarrolle hace unos días atrás que es una alternativa a el Famoso "AutoMapper" que a mi recomendación es preferible que no se le use, ya que es demaciado lento.
Este codigo que adjuntare junto con su ejemplo de uso, pasara un object con sus navigations properties así mismo sean listas, a DTO o a ViewModel.

Código: C#
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text.RegularExpressions;
  7.  
  8. namespace ConsoleApplication1
  9. {
  10.     public class MapperConfiguration
  11.     {
  12.         public string Name { get; set; }
  13.         public IList<string> AssemblyList { get; set; }
  14.         public List<Assembly> Classes { get; set; }
  15.     }
  16.    
  17.     public static class Mapper
  18.     {
  19.         private static MapperConfiguration _mapperConfiguration = new MapperConfiguration { Name = "DTO" };
  20.  
  21.         public static void ConfigureMapper(MapperConfiguration mapperConfiguration)
  22.         {
  23.             //_mapperConfiguration.Name = mapperConfiguration.Name;
  24.             _mapperConfiguration = mapperConfiguration;
  25.  
  26.             if ( mapperConfiguration.AssemblyList != null)
  27.             {
  28.                 foreach(var item in mapperConfiguration.AssemblyList)
  29.                 {
  30.                     var assemblyTempList = Assembly.ReflectionOnlyLoad(item);
  31.                     _mapperConfiguration.Classes.Add(assemblyTempList);
  32.                 }
  33.                
  34.             }
  35.         }
  36.  
  37.         #region Mapper con configuracion
  38.  
  39.         public static U MapProperty<T,U>(this T source, IDictionary<string,string> configurationMapper)
  40.             where T : class, new()
  41.             where U : class, new()
  42.         {
  43.             if ( source == null || configurationMapper == null)
  44.             {
  45.                 return default(U);
  46.             }
  47.  
  48.             /*Obtenemos las properties del object source*/
  49.             var sourceProperties = source.GetType().GetProperties();
  50.  
  51.             var destinyInstance = Activator.CreateInstance(typeof(U));
  52.             var destinyProperties = destinyInstance.GetType().GetProperties();
  53.  
  54.             foreach(var i in sourceProperties)
  55.             {
  56.                 //Buscamos si la property que quiere copiar tiene source
  57.                 var firstFind = configurationMapper.FirstOrDefault(m => m.Key.Contains(i.Name));
  58.                 if (string.IsNullOrEmpty(firstFind.Key) || string.IsNullOrEmpty(firstFind.Value))
  59.                     continue;
  60.  
  61.                 var secondFind = destinyProperties.FirstOrDefault(m => m.Name.Contains(firstFind.Value));
  62.                 if ( secondFind == null)
  63.                 {
  64.                     continue;
  65.                 }
  66.  
  67.                 if ( i.Name.Contains("Collection"))
  68.                 {
  69.  
  70.                 }
  71.  
  72.                 secondFind.SetValue(destinyInstance, i.GetValue(source));
  73.  
  74.             }
  75.  
  76.             return (U)destinyInstance;
  77.         }
  78.  
  79.         #endregion
  80.  
  81.         #region Formula 1
  82.  
  83.         /*Metodo para mapear simples objects*/
  84.         public static dynamic Map<T>(this T source)
  85.             where T : class, new()
  86.         {
  87.             //Check for source
  88.             if (source == null )
  89.                 return null;
  90.  
  91.             //Donde almacenaremos el tipo de destino
  92.             Type destinyType = null;
  93.  
  94.             //Obtenemos todas las clases
  95.             var classList = Assembly.GetExecutingAssembly().GetTypes();
  96.  
  97.             //Obtenemos las properties del source
  98.             var propertiesSource = source.GetType().GetProperties();
  99.  
  100.             //Si no podemos obtener clases o properties
  101.             if ( propertiesSource == null || classList == null )
  102.             {
  103.                 return new Exception("Error al obtener clases o properties desde el assembly");
  104.             }
  105.  
  106.             if (source.GetType().ToString().Contains("Collection"))
  107.             {
  108.                 if (source.GetType().Name.Contains("ViewModel") || source.GetType().Name.Contains("DTO") || source.GetType().Name.Contains(_mapperConfiguration.Name))
  109.                 {
  110.                     var firstTest = Regex.Split(propertiesSource.FirstOrDefault().Name, "ViewModel")[0];
  111.                     if (string.IsNullOrEmpty(firstTest))
  112.                     {
  113.                         firstTest = "DTO";
  114.                     }
  115.                     else
  116.                     {
  117.                         firstTest = "ViewModel";
  118.                     }
  119.  
  120.                     destinyType = classList.FirstOrDefault(
  121.                         m => m.Name.Contains(Regex.Split(propertiesSource.FirstOrDefault().Name,firstTest)[0] + _mapperConfiguration.Name));
  122.                 }
  123.                 else
  124.                 {
  125.                     destinyType = classList.FirstOrDefault(
  126.                         m => m.Name.Contains(propertiesSource.FirstOrDefault().Name + _mapperConfiguration.Name));
  127.                 }
  128.             }
  129.             else
  130.             {
  131.                 if (source.GetType().Name.Contains("ViewModel") || source.GetType().Name.Contains("DTO") || source.GetType().Name.Contains(_mapperConfiguration.Name))
  132.                 {
  133.                     var firstTest = Regex.Split(source.GetType().Name, "ViewModel")[0];
  134.                     if (string.IsNullOrEmpty(firstTest))
  135.                     {
  136.                         firstTest = "DTO";
  137.                     } else
  138.                     {
  139.                         firstTest = "ViewModel";
  140.                     }
  141.  
  142.                     destinyType = classList.FirstOrDefault(
  143.                         m => m.Name.Contains(Regex.Split(source.GetType().Name,firstTest)[0] + _mapperConfiguration.Name));
  144.                 }
  145.                 else
  146.                 {
  147.                     destinyType = classList.FirstOrDefault(
  148.                         m => m.Name.Contains(source.GetType().Name + _mapperConfiguration.Name));
  149.                 }
  150.             }
  151.  
  152.             try
  153.             {
  154.  
  155.                 //Creamos la instancia del object
  156.                 var instance = Activator.CreateInstance(destinyType);
  157.  
  158.                 //Obtenemos las properties del object de destino
  159.                 var propertyOfDestiny = instance.GetType().GetProperties();
  160.  
  161.                 foreach (var item in propertyOfDestiny)
  162.                 {
  163.                     //Buscamos la property
  164.                     var result = propertiesSource.FirstOrDefault(m => m.Name == item.Name);
  165.                     if (result != null)
  166.                     {
  167.                         //En caso de que no sea un Object de tipo distinto a los nativos de C#
  168.                         if ((!(result).PropertyType.Name.Contains("String")) && (!(result).PropertyType.Name.Contains("Int"))
  169.                             && (!(result).PropertyType.Name.Contains("Bool")) && (!(result).PropertyType.Name.Contains("Float"))
  170.                             && (!(result).PropertyType.Name.Contains("Double")))
  171.                         {
  172.                             //En caso de ser lista
  173.                             if (result.ToString().Contains("Collection"))
  174.                             {
  175.                                 Type type = null;
  176.  
  177.                                 if (result.PropertyType.GetGenericArguments().Single().Name.Contains("ViewModel") || result.PropertyType.GetGenericArguments().Single().Name.Contains("DTO") ||
  178.                                     result.PropertyType.GetGenericArguments().Single().Name.Contains(_mapperConfiguration.Name))
  179.                                 {
  180.                                     var firstTest = Regex.Split(result.PropertyType.GetGenericArguments().Single().Name, "ViewModel")[0];
  181.                                     if (string.IsNullOrEmpty(firstTest))
  182.                                     {
  183.                                         firstTest = "DTO";
  184.                                     } else
  185.                                     {
  186.                                         firstTest = "ViewModel";
  187.                                     }
  188.  
  189.                                     type = classList.FirstOrDefault(m => m.FullName.Contains(Regex.Split(result.PropertyType.GetGenericArguments().Single().Name,firstTest)[0] + _mapperConfiguration.Name));
  190.                                 }
  191.                                 else
  192.                                 {
  193.                                     type = classList.FirstOrDefault(m => m.FullName.Contains(result.PropertyType.GetGenericArguments().Single().Name + _mapperConfiguration.Name));
  194.                                 }
  195.  
  196.                                 if (type == null)
  197.                                 {
  198.                                     continue;
  199.                                 }
  200.  
  201.                                 var listInstance = (IList)typeof(List<>).MakeGenericType(type).GetConstructor(Type.EmptyTypes).Invoke(null);
  202.  
  203.                                 item.SetValue(instance, ((ICollection)result.GetValue(source)).MapList());
  204.                             }
  205.                             else
  206.                             {
  207.                                 Type type = null;
  208.                                 if (result.Name.Contains("ViewModel") || result.Name.Contains("DTO") ||
  209.                                     result.Name.Contains(_mapperConfiguration.Name))
  210.                                 {
  211.  
  212.                                     var firstTest = Regex.Split(result.Name, "ViewModel")[0];
  213.                                     if (string.IsNullOrEmpty(firstTest))
  214.                                     {
  215.                                         firstTest = "DTO";
  216.                                     }
  217.                                     else
  218.                                     {
  219.                                         firstTest = "ViewModel";
  220.                                     }
  221.  
  222.                                     //En caso de ser un object
  223.                                     type = classList.FirstOrDefault(m => m.FullName.Contains(Regex.Split(result.Name,firstTest)[0] + _mapperConfiguration.Name));
  224.                                 }
  225.                                 else
  226.                                 {
  227.                                     //En caso de ser un object
  228.                                     type = classList.FirstOrDefault(m => m.FullName.Contains(result.Name + _mapperConfiguration.Name));
  229.                                 }
  230.                                 if (type == null)
  231.                                 {
  232.                                     continue;
  233.                                 }
  234.  
  235.                                 item.SetValue(instance, result.GetValue(source).Map());
  236.                             }
  237.                         }
  238.                         else
  239.                         {
  240.                             //Property normal
  241.                             item.SetValue(instance, result.GetValue(source));
  242.                         }
  243.                     }
  244.                 }
  245.  
  246.                 return instance;
  247.  
  248.             }
  249.             catch (Exception e)
  250.             {
  251.                 return e.Message;
  252.             }
  253.  
  254.         }
  255.  
  256.         /*Metodos para mapear listas*/
  257.         public static dynamic MapList<T>(this T source)
  258.             where T : ICollection
  259.         {
  260.             //Check for source
  261.             if (source == null)
  262.                 return null;
  263.  
  264.             if (source.GetType().GetGenericArguments().Count() == 0)
  265.                 return null;
  266.  
  267.             Type destinyType = null;
  268.             bool isCollection = false;
  269.  
  270.             if (source.GetType().ToString().Contains("Collection"))
  271.             {
  272.                 foreach(var i in source)
  273.                 {
  274.                     if ( i.GetType().Name.Contains("ViewModel") || i.GetType().Name.Contains("DTO") || i.GetType().Name.Contains(_mapperConfiguration.Name))
  275.                     {
  276.                         var firstTest = Regex.Split(i.GetType().Name, "ViewModel")[0];
  277.                         if (string.IsNullOrEmpty(firstTest))
  278.                         {
  279.                             firstTest = Regex.Split(i.GetType().Name, "DTO")[0];
  280.                         }
  281.  
  282.                         destinyType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(
  283.                             m => m.Name.Contains(firstTest + _mapperConfiguration.Name));
  284.                     }
  285.                     else
  286.                     {
  287.                         destinyType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(
  288.                             m => m.Name.Contains(i.GetType().Name + _mapperConfiguration.Name));
  289.                     }
  290.  
  291.                     isCollection = true;
  292.  
  293.                     break;
  294.                 }
  295.             }
  296.  
  297.             if (!isCollection)
  298.                 return new Exception("Este object no es una lista de tipo coleccion");
  299.  
  300.             var listType = source.GetType().GetGenericArguments().Single();
  301.  
  302.             //Check if the type of object is or not a collection list.
  303.             if (source.GetType().ToString().Contains("Collection"))
  304.             {
  305.                 try
  306.                 {
  307.                     dynamic list;
  308.  
  309.                     //Create instance of list
  310.                     if ( isCollection)
  311.                     {
  312.                         list = (IList)typeof(List<>).MakeGenericType(destinyType).GetConstructor(Type.EmptyTypes).Invoke(null);
  313.                     } else
  314.                     {
  315.                         list = Activator.CreateInstance(destinyType);
  316.                     }
  317.  
  318.                     //Loop in the list
  319.                     foreach (var i in source)
  320.                     {
  321.                         if (i.GetType().ToString().Contains("Collection"))
  322.                         {
  323.                             var mapped = ((ICollection)i).MapList();
  324.  
  325.                             foreach (var item in mapped)
  326.                             {
  327.                                 ((IList<object>)list).Add(item);
  328.                             }
  329.  
  330.                         }
  331.                         else
  332.                         {
  333.                             ((IList)list).Add(i.Map());
  334.                         }
  335.  
  336.                     }
  337.  
  338.                     return list;
  339.                 }
  340.                 catch (Exception e)
  341.                 {
  342.                     return e.Message;
  343.                 }
  344.  
  345.             }
  346.  
  347.             return null;
  348.         }
  349.  
  350.         #endregion
  351.  
  352.         #region Formula 2
  353.  
  354.         /*Metodo para mapear simples objects*/
  355.         public static dynamic MapToEntity<T>(this T source)
  356.             where T : class, new()
  357.         {
  358.             //Check for source
  359.             if (source == null)
  360.                 return null;
  361.  
  362.             Type destinyType = null;
  363.  
  364.             //Obtenemos todas las clases
  365.             var classList = Assembly.GetExecutingAssembly().GetTypes();
  366.  
  367.             //Obtenemos las properties del source
  368.             var propertiesSource = source.GetType().GetProperties();
  369.  
  370.             //Si no podemos obtener clases o properties
  371.             if ( propertiesSource == null || classList == null )
  372.             {
  373.                 return new Exception("Error al obtener clases o properties desde el assembly");
  374.             }
  375.  
  376.             if (source.GetType().ToString().Contains("Collection"))
  377.             {
  378.                 destinyType = classList.FirstOrDefault(
  379.                     m => m.Name.Contains(Regex.Split(propertiesSource.FirstOrDefault().Name,_mapperConfiguration.Name)[0]));
  380.  
  381.             }
  382.             else
  383.             {
  384.                 destinyType = classList.FirstOrDefault(
  385.                     m => m.Name.Contains(Regex.Split(source.GetType().Name,_mapperConfiguration.Name)[0]));
  386.             }
  387.  
  388.             try
  389.             {
  390.                 //Creamos la instancia del object
  391.                 var instance = Activator.CreateInstance(destinyType);
  392.  
  393.                 //Obtenemos las properties del object de destino
  394.                 var propertyOfDestiny = instance.GetType().GetProperties();
  395.  
  396.                 foreach (var item in propertyOfDestiny)
  397.                 {
  398.                     //Buscamos la property
  399.                     var result = propertiesSource.FirstOrDefault(m => m.Name == item.Name);
  400.                     if (result != null)
  401.                     {
  402.                         //En caso de que no sea un Object de tipo distinto a los nativos de C#
  403.                         if ((!(result).PropertyType.Name.Contains("String")) && (!(result).PropertyType.Name.Contains("Int"))
  404.                             && (!(result).PropertyType.Name.Contains("Bool")) && (!(result).PropertyType.Name.Contains("Float"))
  405.                             && (!(result).PropertyType.Name.Contains("Double")))
  406.                         {
  407.                             //En caso de ser lista
  408.                             if (result.ToString().Contains("Collection"))
  409.                             {
  410.                                 var type = classList.FirstOrDefault(m => m.FullName.Contains(Regex.Split(result.PropertyType.GetGenericArguments()
  411.                                     .Single().Name,_mapperConfiguration.Name)[0]));
  412.  
  413.                                 if (type == null)
  414.                                 {
  415.                                     continue;
  416.                                 }
  417.  
  418.                                 var listInstance = (IList)typeof(List<>).MakeGenericType(type).GetConstructor(Type.EmptyTypes).Invoke(null);
  419.  
  420.                                 item.SetValue(instance, ((ICollection)result.GetValue(source)).MapToEntityList());
  421.                             }
  422.                             else
  423.                             {
  424.                                 //En caso de ser un object
  425.                                 var type = classList.FirstOrDefault(m => m.FullName.Contains(Regex.Split(result.Name,_mapperConfiguration.Name)[0]));
  426.  
  427.                                 if (type == null)
  428.                                 {
  429.                                     continue;
  430.                                 }
  431.  
  432.                                 item.SetValue(instance, result.GetValue(source).MapToEntity());
  433.                             }
  434.                         }
  435.                         else
  436.                         {
  437.                             //Property normal
  438.                             item.SetValue(instance, result.GetValue(source));
  439.                         }
  440.                     }
  441.                 }
  442.  
  443.                 return instance;
  444.  
  445.             }
  446.             catch (Exception e)
  447.             {
  448.                 return e.Message;
  449.             }
  450.  
  451.         }
  452.  
  453.         /*Metodos para mapear listas*/
  454.         public static dynamic MapToEntityList<T>(this T source)
  455.             where T : ICollection
  456.         {
  457.  
  458.             //Check for source
  459.             if (source == null)
  460.                 return null;
  461.  
  462.             if (source.GetType().GetGenericArguments().Count() == 0)
  463.                 return null;
  464.  
  465.             Type destinyType = null;
  466.             bool isCollection = false;
  467.  
  468.             if (source.GetType().ToString().Contains("Collection"))
  469.             {
  470.                 foreach (var i in source)
  471.                 {
  472.                     destinyType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(
  473.                     m => m.Name.Contains(Regex.Split(i.GetType().Name,_mapperConfiguration.Name)[0]));
  474.  
  475.                     isCollection = true;
  476.  
  477.                     break;
  478.                 }
  479.             }
  480.  
  481.             if (!isCollection)
  482.                 return new Exception("Este object no es una lista de tipo coleccion");
  483.  
  484.             var listType = source.GetType().GetGenericArguments().Single();
  485.  
  486.             //Check if the type of object is or not a collection list.
  487.             if (source.GetType().ToString().Contains("Collection"))
  488.             {
  489.                 try
  490.                 {
  491.                     dynamic list;
  492.  
  493.                     //Create instance of list
  494.                     if (isCollection)
  495.                     {
  496.                         list = (IList)typeof(List<>).MakeGenericType(destinyType).GetConstructor(Type.EmptyTypes).Invoke(null);
  497.                     }
  498.                     else
  499.                     {
  500.                         list = Activator.CreateInstance(destinyType);
  501.                     }
  502.  
  503.                     //Loop in the list
  504.                     foreach (var i in source)
  505.                     {
  506.                         if (i.GetType().ToString().Contains("Collection"))
  507.                         {
  508.                             var mapped = ((ICollection)i).MapToEntityList();
  509.  
  510.                             foreach (var item in mapped)
  511.                             {
  512.                                 ((IList<object>)list).Add(item);
  513.                             }
  514.  
  515.                         }
  516.                         else
  517.                         {
  518.                             ((IList)list).Add(i.MapToEntity());
  519.                         }
  520.  
  521.                     }
  522.  
  523.                     return list;
  524.                 }
  525.                 catch (Exception e)
  526.                 {
  527.                     return e.Message;
  528.                 }
  529.  
  530.             }
  531.  
  532.             return null;
  533.         }
  534.  
  535.         #endregion
  536.     }
  537. }
  538.  
  539.  

Ejemplo de uso

Código: C#
  1. using ConsoleApplication1.DTO;
  2. using ConsoleApplication1.Entidades;
  3. using System;
  4. using System.Collections.Generic;
  5.  
  6. public class Uno
  7. {
  8.     public string Nombre { get; set; }
  9.     public string Apellido { get; set; }
  10.  
  11.     public void Saludar(string message, string another)
  12.     {
  13.         Console.WriteLine(message + "\n" + another);
  14.         return;
  15.     }
  16. }
  17.  
  18. public class Dos
  19. {
  20.     public string Name { get; set; }
  21.     public string SurName { get; set; }
  22.  
  23.     public void Saludar(string message)
  24.     {
  25.         Console.WriteLine(message);
  26.         return;
  27.     }
  28. }
  29.  
  30. namespace ConsoleApplication1
  31. {
  32.     public static class RemoteCall
  33.     {
  34.         /*
  35.          * Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
  36.          * Type type = assembly.GetType("TestAssembly.Main");
  37.          */
  38.         public static T Instance<T>()
  39.             where T : class, new()
  40.         {
  41.             return (T)Activator.CreateInstance(typeof(T));
  42.         }
  43.  
  44.         public static T Invoke<T>(string methodName, object[] parameters)
  45.             where T : class, new()
  46.         {
  47.             var classSource = Instance<T>();
  48.             var methods = classSource.GetType().GetMethods();
  49.  
  50.             foreach(var i in methods)
  51.             {
  52.                 if ( i.Name == methodName)
  53.                 {
  54.                     i.Invoke(classSource, parameters);
  55.                 }
  56.             }
  57.  
  58.             return default(T);
  59.         }
  60.     }
  61.  
  62.     class Program
  63.     {
  64.         static void Main(string[] args)
  65.         {
  66.  
  67.             var objeto = new Usuario
  68.             {
  69.                 Id = 1,
  70.                 Nombre = "Nicolas",
  71.                 Perfil = new List<Perfil>
  72.                 {
  73.                     new Perfil
  74.                     {
  75.                         Tipo = "Normal",
  76.                         Entrega = new Entrega
  77.                         {
  78.                             Proveedor = "Nicolas"
  79.                         }
  80.                     },
  81.                     new Perfil
  82.                     {
  83.                         Tipo = "Punchi",
  84.                         Entrega = new Entrega
  85.                         {
  86.                             Proveedor = "Jebus"
  87.                         }
  88.                     }
  89.                 }
  90.             };
  91.  
  92.             //var instanciado = RemoteCall.Instance<Uno>();
  93.             RemoteCall.Invoke<Dos>("Saludar", new object[] { "hola amigos" } );
  94.  
  95.             var source = new Uno { Nombre = "Nicolas", Apellido = "Buzzi" };
  96.  
  97.             var dic = new Dictionary<string, string>();
  98.  
  99.             dic.Add("Nombre", "Name");
  100.             dic.Add("Apellido", "SurName");
  101.  
  102.             var mapeo = source.MapProperty<Uno,Dos>(dic);
  103.  
  104.             var listOfObjects = new List<Usuario>();
  105.             listOfObjects.Add(objeto);
  106.             listOfObjects.Add(objeto);
  107.  
  108.             //Inicializamos el mapper con nuestra configuracion para adaptarla a viewModel
  109.             Mapper.ConfigureMapper(new MapperConfiguration { Name = "ViewModel" });
  110.  
  111.             /*Convetimos Entidad a DTO*/
  112.             List<UsuarioViewModel> resultadosViewModel = listOfObjects.MapList();
  113.  
  114.             /*Convertimos los ViewModel a Entidades*/
  115.             List<Usuario> entidadesDeViewModel = resultadosViewModel.MapToEntityList();
  116.  
  117.            
  118.             //Inicializamos el mapper con nuestra configuracion para adaptarla a DTOS
  119.             Mapper.ConfigureMapper(new MapperConfiguration { Name = "DTO" });
  120.  
  121.             //Convertimos el resultado de ViewModels a DTO
  122.             List<UsuarioDTO> resultadosDTO = resultadosViewModel.MapList();
  123.  
  124.             //Convetimos los DTO a entidad
  125.             var resultEntity = resultadosDTO.MapToEntityList();
  126.  
  127.             Console.BackgroundColor = ConsoleColor.Black;
  128.             Console.ForegroundColor = ConsoleColor.Green;
  129.  
  130.             Console.WriteLine("Todo correcto");
  131.             Console.ReadLine();
  132.  
  133.         }
  134.     }
  135. }
  136.  
  137.  

Les dejare el link por si quieren descargarse el proyecto completo.
https://github.com/xxneeco83xx/Mapper

Espero que les sea de ayuda, y cualquier duda, sugerencia o comentario, estoy a la espera.
Saludos.
« Última modificación: Julio 30, 2016, 12:51:12 am por ANTRAX »
El arte de crear malware, es algo que solo pocos entienden!


 

¿Te gustó el post? COMPARTILO!



Microsoft lanza Code Hunt, un juego para aprender programación

Iniciado por Alejandro_99

Respuestas: 0
Vistas: 1620
Último mensaje Junio 13, 2014, 04:18:26 pm
por Alejandro_99
[C#] Source de un programa para completar ofertas de offerwalls.

Iniciado por ragaza

Respuestas: 0
Vistas: 664
Último mensaje Mayo 19, 2018, 03:24:39 pm
por ragaza
Clase en c# para hacer consultas a Bases de datos

Iniciado por Devilboy

Respuestas: 5
Vistas: 7014
Último mensaje Febrero 25, 2011, 08:56:10 pm
por _katze_
[info] Ideas para encriptar ejecutables .net en runtime

Iniciado por Cyb3r2876

Respuestas: 0
Vistas: 1722
Último mensaje Enero 10, 2014, 07:45:51 am
por Cyb3r2876
Crear Aplicaciones en C# para subir videos de Youtube

Iniciado por Snifer

Respuestas: 0
Vistas: 1765
Último mensaje Febrero 24, 2011, 01:16:23 am
por Snifer