• Domingo 22 de Diciembre de 2024, 15:09

Autor Tema:  foreach y funcion por referencia?  (Leído 2824 veces)

macarthur

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
foreach y funcion por referencia?
« en: Miércoles 12 de Agosto de 2009, 09:01 »
0
Buenas soy nuevo en el foro y a la pagina de SoloCodigo y tengo la siguiente Duda'.........

         foreach (DataTable CursorDataTable in dataset.Tables)
                     {
                         CursorDataTable.Clear();
                         LoadTable(ref CursorDataTable, where); <--------------  Lo que esta Sombreado bota el siguiente error
                     }

Cannot pass 'CursorDataTable' as a ref or out argument because it is a 'foreach iteration variable

la funcion LoadTable recibe por referencia un DataTable y lo que quiero hacer es modificar cada DataTable del DataSet

Como hago, Gracias de antemano Por la Atencion Prestada

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: foreach y funcion por referencia?
« Respuesta #1 en: Jueves 13 de Agosto de 2009, 16:31 »
0
Primero que todo por que hiciste a LoadTable para recibir un DataTable por referencia?  pues de todas formas un DataTable es un tipo por referencia asi no utilices ref...

en fin, en el caso de que tangas algo un poco enmarañado y que realmente quieras pasar por referencia algo que ya de por si es por referencia...

No utilices foreach, trata conun for comun y corriente:

Código: C#
  1.  for (int i =0 ; i < dataset.Tables.Count; i++)
  2. {
  3.  dataset.Tables[i].Clear();
  4.  LoadTable( ref dataset.Tables[i], where);
  5. }
  6.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

macarthur

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: foreach y funcion por referencia?
« Respuesta #2 en: Jueves 13 de Agosto de 2009, 16:55 »
0
Probe lo de no enviarlo por referencia y sige funcionando y la solucion que me diste se aplica exelente, te agradeceria si puedes ampliarme la informacion de lo que dijiste que un DataTable ya es un valor por referencia no e encontrado informacion valiosa al respecto y no se que otros tipos de variable son ya valores por referencia o no se si te entendi bien el caso es que funciono y agradesco la respuesta.

Gracias

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: foreach y funcion por referencia?
« Respuesta #3 en: Jueves 13 de Agosto de 2009, 17:12 »
0
Cita de: "macarthur"
Probe lo de no enviarlo por referencia y sige funcionando y la solucion que me diste se aplica exelente, te agradeceria si puedes ampliarme la informacion de lo que dijiste que un DataTable ya es un valor por referencia no e encontrado informacion valiosa al respecto y no se que otros tipos de variable son ya valores por referencia o no se si te entendi bien el caso es que funciono y agradesco la respuesta.

Gracias

todos los objetos que crees a partir de clases son pasados por referencia, los objetos que crees con tipos valor o con estructuras son pasados por valor salvo que lo indiques con la palabra clave ref... como lo estabas haciendo.

Un objeto creado a partir de una clase crea un area de memoria a la cual se llega a partir de un apuntador, que no es mas que una direccion de memoria que hace referencia a en donde quedo el objeto...

por ello los objetos creados a partir de clases son por referencia,

mientras que cosas como int, float, decimal, long y estructuras entre otros se crean en una parte de la memoria contigua de tu programa llamada stack, por ello para saber donde estan no se necesita una referencia a la memoria sino simplemente se sabe que están en alguna posicion de esa pequeña porción de memoria llamada stack para ello no necesitas referencia por tal se pasan por valor...

si haces un parametro ref de un DataTable ( el cual viene de una clase, por lo mismo ya esta por referencia ) lo que haces es crear una referencia ( o sea una direccion de memoria) que dice donde queda otra referencia  que finalmente es la que si tiene la direccion de donde esta ubicado el objeto... entonces es doble vuelta y dado que la soble referencia solo existiria en el foreach (porque en C# las variables tienen scope local ) entonces te salia ese error.

en fin el tema en profundidad puede ser mas canzón de entender, pero lo basico es que aprendas a diferencia tipos por valor y tipos por referencia:
http://msdn.microsoft.com/es-es/library/ms173104.aspx
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

macarthur

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: foreach y funcion por referencia?
« Respuesta #4 en: Jueves 13 de Agosto de 2009, 17:15 »
0
Gracias por la informacion mi meta es aprender C# bien y no cometer errores de redundancia ni nada de eso agradesco tu ayuda...

Gracias.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: foreach y funcion por referencia?
« Respuesta #5 en: Jueves 13 de Agosto de 2009, 17:39 »
0
Este es el  mejor lugar para aprender:

http://msdn.microsoft.com/en-us/beginner/default.aspx
http://msdn.microsoft.com/es-co/beginner/default.aspx


desde luego lo mejor es comprar un buen libro y si sabes ingles mejor...

visita mi carpeta publica... el link esta en mi blog...
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io