Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] C# propiedades dentro de propiedades?

Estas en el tema de C# propiedades dentro de propiedades? en el foro de .NET en Foros del Web. Buenas, estoy queriendo hacer algo.. medio... "PHPero" He visto que C# y Java se caracterizan por tener esos nombres taaaaaaaaaaaan largos (pero a su vez ...
  #1 (permalink)  
Antiguo 21/01/2017, 09:46
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 19 años, 2 meses
Puntos: 19
Pregunta C# propiedades dentro de propiedades?

Buenas, estoy queriendo hacer algo.. medio... "PHPero"

He visto que C# y Java se caracterizan por tener esos nombres taaaaaaaaaaaan largos (pero a su vez descriptivos).

Ahora, a mi no me gustan los nombres largos.


Supongamos que tengo.. List<Persona>, y de aca quiero obtener toda mi información. Entonces creo lo primero que se me viene a la mente, es una propiedad(List<Persona> Personas)
Código:
string test1 = string.Format("Cantidad de personas: {0}", Personas.Count());
Todo perfecto... pero, es posible hacer esto..?
Código:
string test1 = string.Format("Cantidad de personas: {0}", Personas.Count());
string test2 = string.Format("Cantidad de personas buenas: {0}", Personas.Buenas.Count());
string test3 = string.Format("Cantidad de personas malas: {0}", Personas.Malas.Count());

Estoy bastante oxidado y nunca fui de programar en C#.
Tal vez lo que quiero hacer no es posible en C# o al menos no de esta manera. Ustedes me diran.

Agradezco de antemano el tiempo y la posible ayuda.
Saludos.
  #2 (permalink)  
Antiguo 21/01/2017, 11:10
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
Respuesta: C# propiedades dentro de propiedades?

Algunos ejemplos:
Código C#:
Ver original
  1. Personas.Where(Persona=>Persona.EsBuena==true).Count();
  2. Personas.Where(x=>x.EsBuena && x.EsGrande).Count();
  3.  
  4. var PersonasBuenas = Personas.Where(Persona=>Persona.EsBuena==true).ToList();
  5. var PersonasMalas = Personas.Where(Persona=>Persona.EsBuena==false).ToList();

EsBuena seria un campo/field pero podría ser un método o propiedad.
__________________
Rodrigo Agüero
  #3 (permalink)  
Antiguo 21/01/2017, 11:16
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 10 meses
Puntos: 52
Respuesta: C# propiedades dentro de propiedades?

Cita:
Iniciado por Fernand0 Ver Mensaje
estoy queriendo hacer algo.. medio... "PHPero"
Yo te diría que en lugar de ir para atrás, y tratar de adaptar las malas prácticas de los lenguajes poco serios como PHP a lenguajes profesionales como C#, aprendas las prácticas correctas y te olvides de los lenguajes de juguete.

Cita:
Iniciado por Fernand0 Ver Mensaje
Ahora, a mi no me gustan los nombres largos.
Las buenas prácticas no se tratan de lo que a vos te guste o no, sino de lo que sea mejor para maximizar la legibilidad, mantenibilidad, y varios otros aspectos del código. Tu "gusto" es irrelevante.

si yo leo:

Código C#:
Ver original
  1. var a = new X<Y>();

no puedo a simple vista tener noción de qué cosa sea a, ni X, ni Y.

En cambio:

Código C#:
Ver original
  1. var clientes = new List<Cliente>();

es mucho más descriptivo, y reduce la necesidad de documentar o comentar el código, ya que a simple vista se entiende perfectamente.

Cita:
Iniciado por Fernand0 Ver Mensaje
Supongamos que tengo.. List<Persona>, y de aca quiero obtener toda mi información. Entonces creo lo primero que se me viene a la mente, es una propiedad(List<Persona> Personas)
Código:
string test1 = string.Format("Cantidad de personas: {0}", Personas.Count());
Todo perfecto... pero, es posible hacer esto..?
Código:
string test1 = string.Format("Cantidad de personas: {0}", Personas.Count());
string test2 = string.Format("Cantidad de personas buenas: {0}", Personas.Buenas.Count());
string test3 = string.Format("Cantidad de personas malas: {0}", Personas.Malas.Count());
hay varias formas de hacer esto, pero no lo recomiendo.

En lugar de eso, una simple consulta de LINQ es más que suficiente en este caso:

Código C#:
Ver original
  1. var personas = new List<Personas>();
  2.  
  3. // suponiendo que existe una propiedad en la clase Persona, para determinar si una persona es buena
  4. var personasBuenas = personas.Where(x => x.EsUnaPersonaBuena);
  5.  
  6. // todas las personas que no son buenas, por descarte son malas.
  7. var personasMalas = personas.Except(personasBuenas);
  8.  
  9. var total = $"Cantidad de personas: { personas.Count }";
  10. var buenas = $"Cantidad de Personas Buenas: { personasBuenas.Count() }";
  11. var malas = $"Cantidad de Personas Malas: { personasMalas.Count() }";

Otra opción sería heredar de List<Persona> e implementar estas propiedades, pero es un approach que no escala, ya que por cada combinacion de tipo y propiedades tendrias que crear una clase distinta, y luego convertir los datos a esa clase, etc.

En fin, la forma de programar en languajes serios dista bastante de lo que se suele hacer en php.
  #4 (permalink)  
Antiguo 21/01/2017, 12:36
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 19 años, 2 meses
Puntos: 19
Respuesta: C# propiedades dentro de propiedades?

A ver, agradezco todo lo que hicieron.
No me voy a poner a discutir opiniones desubicadas, porque esto no es un bar..

Lamentablemente ninguno entendió lo que quiero hacer.

Tengo este codigo..
Código C#:
Ver original
  1. protected IEnumerable<Position> Entries
  2.         {
  3.             get { return Positions.FindAll(Label).Where(p => p.SymbolCode == Symbol.Code); }
  4.         }
  5.  
  6.         protected IEnumerable<Position> BuyEntries
  7.         {
  8.             get { return Entries.Where(p => p.TradeType == TradeType.Buy).OrderBy(p => p.Id); }
  9.         }
  10.  
  11.         protected IEnumerable<Position> SellEntries
  12.         {
  13.             get { return Entries.Where(p => p.TradeType == TradeType.Sell).OrderBy(p => p.Id); }
  14.         }

Entonces, en vez de acceder por "BuyEntries" y "SellEntries me gustaria hacerlo por "Entries.Buy" y "Entries.Sell".. al mismo tiempo que lo hago por "Entries".. por dar un ejemplo
Se entiende que "Entries" solo seria como un "Entries.All", pero es redundante semanticamente...
O sea tampoco la solucion viene por agregar "Entries.All" y al mismo tiempo poner "Entries.Buy" y "Entries.Sell"

Saludos.
  #5 (permalink)  
Antiguo 21/01/2017, 13:56
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 19 años, 6 meses
Puntos: 16
Respuesta: C# propiedades dentro de propiedades?

Buenas compañero,

Creo que sé lo que quieres hacer... Agregar una propiedad a Entries que te devuelva los que son del tipo Buy o del tipo Sell...
sólo tienes que crear la clase Entries poniendo que partial class, o sea, que esa clase se declara en varios archivos... De esta forma, en el nuevo, puedes declarar 2 propiedades nuevas que te devuelvan lo que quieres...


Un saludo y espero te sirva como iluminación ;)

Ejemplo VB.Net:
Código vb:
Ver original
  1. Partial Public Class Entries
  2.     Public ReadOnly Property Buy As IEnumerable(Of Position)
  3.         Get
  4.             'Aquí tu código, modificado para hacer la búsqueda PARECIDA a como la tienes ahora.
  5.        End Get
  6.     End Property
  7.  
  8.  
  9.  
  10.     Public ReadOnly Property Sell As IEnumerable(Of Position)
  11.         Get
  12.             'Aquí tu código, modificado para hacer la búsqueda PARECIDA a como la tienes ahora.
  13.        End Get
  14.     End Property
  15. End Class
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #6 (permalink)  
Antiguo 21/01/2017, 18:48
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 19 años, 2 meses
Puntos: 19
Respuesta: C# propiedades dentro de propiedades?

Ahi esta! Inspirado por la respuesta de Drako_18, segui buscando y buscando...

Pongo el "esqueleto" de lo que queria lograr:
Código C#:
Ver original
  1. public class Entries
  2. {
  3.  
  4.    public IEnumerable<Position> this[int index]
  5.    {
  6.       get { return ...; }
  7.    }
  8.  
  9.    public IEnumerable<Position> Buy
  10.    {
  11.       get { return ...; }
  12.    }
  13.  
  14.    public IEnumerable<Position> Sell
  15.    {
  16.       get { return ...; }
  17.    }
  18.  
  19. }

Saludos

Etiquetas: form, programa, propiedades
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:17.