una - update property in list c#
La mejor manera de actualizar un elemento en una lista genérica (3)
Podrías hacerlo:
var matchingDog = AllDogs.FirstOrDefault(dog => dog.Id == "2"));
Esto devolverá el perro correspondiente, de lo contrario, se devolverá null
.
A continuación, puede establecer la propiedad de la siguiente manera:
if (matchingDog != null)
matchingDog.Name = "New Dog Name";
Esta pregunta ya tiene una respuesta aquí:
Supongamos que tenemos una clase llamada Perro con dos cadenas "Nombre" e "Id". Ahora supongamos que tenemos una lista con 4 perros en ella. Si quisieras cambiar el nombre del Perro con la "Id" de "2", ¿cuál sería la mejor manera de hacerlo?
Dog d1 = new Dog("Fluffy", "1");
Dog d2 = new Dog("Rex", "2");
Dog d3 = new Dog("Luna", "3");
Dog d4 = new Dog("Willie", "4");
List<Dog> AllDogs = new List<Dog>()
AllDogs.Add(d1);
AllDogs.Add(d2);
AllDogs.Add(d3);
AllDogs.Add(d4);
Si la lista está ordenada (como sucede en el ejemplo), una búsqueda binaria en el índice ciertamente funciona.
public static Dog Find(List<Dog> AllDogs, string Id)
{
int p = 0;
int n = AllDogs.Count;
while (true)
{
int m = (n + p) / 2;
Dog d = AllDogs[m];
int r = string.Compare(Id, d.Id);
if (r == 0)
return d;
if (m == p)
return null;
if (r < 0)
n = m;
if (r > 0)
p = m;
}
}
No estoy seguro de cuál sería la versión LINQ de esto.
AllDogs.First(d => d.Id == "2").Name = "some value";
Sin embargo, una versión más segura de esto podría ser esta:
var dog = AllDogs.FirstOrDefault(d => d.Id == "2");
if (dog != null) { dog.Name = "some value"; }