Respondida ienumerable, iqueryable

  • viernes, 13 de abril de 2012 22:47
     
     

    Saludos queria saber en que casos debo especificar el ienumerable como en este caso

    IEnumerable<DynamicOrdering> orderings = parser.ParseOrdering();

    hasta donde tengo entendido esto se pone  cuando se tratat de iterar un  lis ta que no es colleccion

Todas las respuestas

  • viernes, 13 de abril de 2012 23:24
    Moderador
     
     

    exacto estos son bastante usados cuando trabjas con queries de linq

    es mas veras que IQueruyable estan bajo el namespace System.Linq

    mientras que

    IEnumerable(T) Interface

    esta bajo System.Collections

    por lo que claramente la primera la suarias con linq mientras que la otra podrias usarla para asignar colecciones simple que quieres asignar a una interfaz generica

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

  • lunes, 16 de abril de 2012 3:38
     
     
    y para evitar el inum,erable para ellos se utiliza el "var?
  • lunes, 16 de abril de 2012 3:51
    Moderador
     
     

    en realidad el "var" es bastante mas general

    se lo suele usar junto a queries de linq ya que el resultado de estos retornan son objetos bastante largos que declara quedando feo en el codigo

    por eso se usa var para simplificar

    pero podrias poner

    var i = 10;

    y esto tambien es valido, y no estas suando ningun IEnumerable

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

  • lunes, 16 de abril de 2012 3:58
     
     

    Vos te referis a cuando tenes que especificar el tipo, en este caso IEnumerable<DynamicOrdering> y cuando podes usar var?

    El var trabaja por inferencia, es decir, evalua el tipo que esta a la derecha del =(igual) e infiere el tipo.


  • lunes, 16 de abril de 2012 4:07
     
     

    hola ignacio laborde ,

    si masomenos a eso me refiero podria hacer

    var orderings = parser.ParseOrdering();

     y luego aplicar el foreach

    sobre orderings?

  • lunes, 16 de abril de 2012 4:10
    Moderador
     
     Respondida

    claro porque no podrias

    si sabes que tipo devuelve ParseOrdering() ya sabes de que tipo es orderings

    porque el var solo es para abreviar la escritura y no definir tipos demasiados largos de declarar

    lo que me pregunto es, antes de preguntarlo al foro, porque no realizas la prueba, digo no es mas directo probarlo y luego sino sale preguntar, te ahorra un paso si sale, porque ya no lo preguntas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


  • lunes, 16 de abril de 2012 4:12
     
     Respondida

    Si perfectamente, el parseordering te termina devolviendo un tipo que no presenta ambieguedad, y lo infiere correctamente, suponete esto:

    Queres declarar un tipo para almacenar double pero pones asi:

    Var valordouble = 2;

    cuando quieras asignarle un valor con coma te va a tirar un error, porque valordouble va a ser creada del tipo int.

    Saludos

  • lunes, 16 de abril de 2012 13:26
     
     

    lo que me pregunto es, antes de preguntarlo al foro, porque no realizas la prueba, digo no es mas directo probarlo y luego sino sale preguntar, te ahorra un paso si sale, porque ya no lo preguntas



    hola Leandro lo que pasa esque no puedo probar el codigo ,estoy revisando las fuentes de un proyecto y en algunos casos veo que usan el Ienumerable y en otras el "var", entonces supongo que la pregunta generica seria en que casos se puede usar uno y otro.
  • lunes, 16 de abril de 2012 13:38
    Moderador
     
     

    como no puedes probar el codigo? no tienes el Visual Studio donde escribes alli lo que estas consultando, digo sino pruebas lo que codificas asi no aprenderas nunca

    estoy revisando las fuentes de un proyecto y en algunos casos veo que usan el Ienumerable y en otras el "var", entonces supongo que la pregunta generica seria en que casos se puede usar uno y otro.

    en el caso que quieras no hay nada que diga donde si y donde no

    igualmente de forma particular me gusta usar var con linq pero para declarar variables simples uso el metodo tradicional

    o sea hacer esto

    var i = 10;

    yo no lo hago, uso

    int i = 10;

    el var lo suelo usar en los lugares donde la declaracion del tipo es larga y dificulta el entendimiento


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

  • lunes, 16 de abril de 2012 13:47
     
      Tiene código

    hola lendro de momento no puedo compilar las fuentes, solo las puedo revisar seguire tu consejo y empezare a probar apenas tenga la oportunidad, y bueno tratando de aclarar el tama yo veo que aveces se usa var en los tipos que define el framework copmo int, double, pero en mi caso el tipo es de una clase

        internal class DynamicOrdering
        {
            public bool Ascending;
            public Expression Selector;
        }

    entonce esto IEnumerable<DynamicOrdering> orderings = parser.ParseOrdering();

    se podria escribir asi?

    var orderings = parser.ParseOrdering();

  • lunes, 16 de abril de 2012 13:51
     
     Respondida Tiene código

    Hola Palermo,

    Como bien dice Ignacio, cuando utilizas var, es el compilador el que infiere el tipo. Esto es util en dos escenarios:

    1.- Simplicidad de codigo, como apunta Leandro.

    2.- Situaciones en las que no se sabe exactamente el tipo: por ejemplo con tipos anonimos, lo que es muy habitual en las sentencias linq.

    Te paso un par de links que son bastante esclarecedores al respecto:

    http://msdn.microsoft.com/es-es/library/bb383973.aspx

    http://msdn.microsoft.com/es-es/library/bb384061.aspx

    Por cierto, respondiendo a tu pregunta: siempre que sepas el tipo de datos puedes utilizar IEnumerable<tipo>, IQueryable<tipo> o simplemente var. Si no sabes el tipo que devuelve tu consulta debes utilizar "var", como por ejemplo en:

    var custQuery = from cust in customers
                    where cust.City == "Phoenix"
                    select new { cust.Name, cust.Phone };


  • lunes, 16 de abril de 2012 13:57
    Moderador
     
     
    se podria escribir asi?var orderings = parser.ParseOrdering();

    exacto, asi es como escribes es como debe ir


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina