Digamos que tengo una claseToList() - ¿Crea una nueva lista?
public class MyObject
{
public int SimpleInt{get;set;}
}
Y tengo una List<MyObject>
, y yo ToList()
y luego cambiar uno de los SimpleInt
, será mi cambio se propaga de nuevo a la lista original. En otras palabras, ¿cuál sería el resultado del siguiente método?
public void RunChangeList()
{
var objs = new List<MyObject>(){new MyObject(){SimpleInt=0}};
var whatInt = ChangeToList(objs);
}
public int ChangeToList(List<MyObject> objects)
{
var objectList = objects.ToList();
objectList[0].SimpleInt=5;
return objects[0].SimpleInt;
}
¿Por qué?
P/S: Lo siento si parece obvio averiguarlo. Pero no tengo compilador ahora ...
También tenga en cuenta que con una 'Lista' de estructuras, una asignación como' objectList [0] .SimpleInt = 5' no estaría permitida (error de tiempo de compilación de C#). Esto se debe a que el valor de retorno del descriptor de acceso 'get' del indexador de listas no es una variable (es una copia devuelta de un valor struct) y por lo tanto _setting_ its member '.SimpleInt' con una expresión de asignación no permitida (mutaría una copia que no se guarda). Bueno, ¿quién usa estructuras mutables de todos modos? –
@Jeppe Stig Nielson: Sí. Y, de manera similar, el compilador también le impedirá hacer cosas como 'foreach (var s en listOfStructs) {s.SimpleInt = 42; } ' Lo realmente malo es cuando intentas algo como 'listOfStructs.ForEach (s => s.SimpleInt = 42)': el compilador lo permite y el código se ejecuta sin excepciones, ¡pero las estructuras en la lista permanecerán sin cambios! – LukeH