• Viernes 19 de Abril de 2024, 08:41

Autor Tema:  Problema Con Linkedlist + Estructuras  (Leído 2854 veces)

aroos

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Problema Con Linkedlist + Estructuras
« en: Viernes 28 de Septiembre de 2007, 14:33 »
0
Hola a todos, este es mi problema:
 Tengo una lista (LinkedList, ArrayList...) de estructuras y el caso es que no puedo modificar la variables de esas estructuras (ni directamente ni a traves de algun método). Creo que con un ejemplo (de tantos que he probado) se verá mejor:

Código: Text
  1. //la estructura con una unica variable a
  2. public struct sPrueba
  3. {
  4.        public int a;
  5.        public void modificaA(int a_) //método para modificar la variable a
  6.        {
  7.             a = a_;
  8.        }
  9. }
  10.  
  11. static void Main(string[] args)
  12. {
  13.        LinkedList<sPrueba> ll = new LinkedList<sPrueba>(); //creamos la lista vacia
  14.        ll.AddLast(new sPrueba()); //añadimos una estructura a la lista
  15.  
  16.         //ll.First.Value.a = 3;  //<---- esto directamente no se puede hacer
  17.         ll.First.Value.modificaA(3); //modificamos a traves de un método
  18.  
  19.         Console.WriteLine("{0}", ll.First.Value.a); //imprimimos el resultado
  20. }
  21.  

Bueno, como se puede ver, parece todo muy sencillo. El caso es que no funciona, el valor que imprimimos es 0, es decir, que no hemos modificado el valor.

Realmente lo he probado todo y ya no se que hacer, ayuda por favor.

Gracias por anticipado.

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Problema Con Linkedlist + Estructuras
« Respuesta #1 en: Viernes 28 de Septiembre de 2007, 19:03 »
0
Que error te envía?...

A mi parecer, debe ser porque C# no admite structs anidados.

Creo que es un problema que debería ser corregido en el lenguaje.

Se vuelve complejo al querer usar llamadas a DLL de C++.

Realiza lo mismo fuera de la estructura, o sea ModificaA creala como una funcion aparte y solo llama a la funcion.

Suerte.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

aroos

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problema Con Linkedlist + Estructuras
« Respuesta #2 en: Viernes 28 de Septiembre de 2007, 21:26 »
0
Antes de nada, gracias por responder.
Vamos a ver, si uso el metodo de la estructura no sale ningun error, pero no modifica el valor.
Pero si intento modificar directamente el valor me sale : "No se puede modificar el valor devuelto de 'System.Collections.Generic.List<sPrueba>.this[int]' porque no es una variable"

Bueno, esto es para una "List" no una "LinkedList", pero el codigo es muy similar y los errores son los mismos.

El código para la "List" seria:

Código: Text
  1. ...Con la misma estructura...
  2.  
  3. List&#60;sPrueba&#62; l = new List&#60;sPrueba&#62;();
  4. l.Add(new sPrueba());
  5. l[0].a = 3;  &#60;--- aqui es donde salta el error
  6.  

Saludos

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema Con Linkedlist + Estructuras
« Respuesta #3 en: Sábado 29 de Septiembre de 2007, 05:12 »
0
Tomado de la ayuda de MSDN
Citar
No se puede modificar el valor devuelto de 'expresión' porque no es una variable
Cannot modify the return value of 'expression' because it is not a variable

Se intentó modificar un tipo de valor que es el resultado de una expresión intermedia. Debido a que dicho valor no es persistente, queda sin modificar.

Para resolver este error, almacene el resultado de la expresión en un valor intermedio o utilice un tipo de referencia para la expresión intermedia.

Ejemplo
En el código siguiente se genera el error CS1612.

Código: Text
  1.  
  2.   Copiar código
  3. // CS1612.cs
  4. public struct MyStruct
  5. {
  6.     public int Width;
  7. }
  8.  
  9. public class ListView
  10. {
  11.     public MyStruct Size
  12.     {
  13.         get { return new MyStruct(); }
  14.     }
  15. }
  16.  
  17. public class MyClass
  18. {
  19.     public MyClass()
  20.     {
  21.         ListView lvi;
  22.         lvi = new ListView();
  23.         lvi.Size.Width = 33;  // CS1612
  24.         // Use this instead:
  25.         // MyStruct temp = lvi.Size;
  26.         // temp.Width = 33;
  27.     }
  28.  
  29.     public static void Main() {}
  30. }
  31.  
  32.  
  33.  

O mejor aun, si no quieres usar una variable intermedia (temp), utiliza mejor una clase en lugar de una estructura, lo probe y funciona correctamente.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

aroos

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problema Con Linkedlist + Estructuras
« Respuesta #4 en: Sábado 29 de Septiembre de 2007, 12:34 »
0
Todo correcto, muchas gracias.