una tomar sacar saber posicion los lista leer existe eliminar elementos elemento datos consultar como buscar acceder c# list properties find

c# - tomar - ¿Cómo puedo encontrar un elemento específico en una Lista<T>?



saber si un elemento existe en una lista c# (7)

O si no prefiere usar LINQ , puede hacerlo a la manera de la vieja escuela:

List<MyClass> list = new List<MyClass>(); foreach (MyClass element in list) { if (element.GetId() == "heres_where_you_put_what_you_are_looking_for") { break; // If you only want to find the first instance a break here would be best for your application } }

Mi aplicación usa una lista como esta:

List<MyClass> list = new List<MyClass>();

Usando el método Add , se agrega otra instancia de MyClass a la lista.

MyClass proporciona, entre otros, los siguientes métodos:

public void SetId(String Id); public String GetId();

¿Cómo puedo encontrar una instancia específica de MyClass utilizando el método GetId ? Sé que existe el método Find , pero no sé si esto funcionaría aquí?


Puede resolver su problema de forma más concisa con un predicado escrito usando la sintaxis del método anónimo:

MyClass found = list.Find(item => item.GetID() == ID);


También puedes usar extensiones LINQ :

string id = "hello"; MyClass result = list.Where(m => m.GetId() == id).First();


Tratar:

list.Find(item => item.id==myid);


Usa una expresión lambda

MyClass result = list.Find(x => x.GetId() == "xy");

Nota: C # tiene una sintaxis incorporada para las propiedades. En lugar de escribir Set-and Get-methods (cómo podría usarlo desde Java), escriba

private string _id; public string Id { get { return _id; } set { _id = value; } }

value es una palabra clave contextual que solo se conoce en el acceso del conjunto. Representa el valor asignado a la propiedad.

Como este patrón se usa a menudo, C # proporciona propiedades implementadas automáticamente. Son una versión corta del código anterior; sin embargo, la variable de respaldo está oculta y no es accesible (se puede acceder desde dentro de la clase en VB, sin embargo).

public string Id { get; set; }

Simplemente puede usar las propiedades como si estuviera accediendo a un campo:

var obj = new MyClass(); obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter. string id = obj.Id; // Calls the getter.

Usando propiedades, buscaría elementos en la lista como este

MyClass result = list.Find(x => x.Id == "xy");

También puede usar propiedades implementadas automáticamente si necesita una propiedad de solo lectura:

public string Id { get; private set; }

Esto le permite establecer el Id dentro de la clase pero no desde el exterior. Si necesita configurarlo también en clases derivadas, también puede proteger al colocador

public string Id { get; protected set; }

Y, por último, puede declarar propiedades como virtual y anularlas en clases derivadas, lo que le permite proporcionar diferentes implementaciones para getters y setters; al igual que para los métodos virtuales ordinarios.

Desde C # 6.0 (Visual Studio 2015, Roslyn) puede escribir auto-propiedades getter solamente con un inicializador en línea

public string Id { get; } = "A07"; // Evaluated once when object is initialized.

También puede inicializar propiedades getter solamente dentro del constructor. Las auto-propiedades Getter-only son verdaderas propiedades de solo lectura, a diferencia de las propiedades implementadas automáticamente con un setter privado.

Esto también funciona con auto-propiedades de lectura-escritura:

public string Id { get; set; } = "A07";

A partir de C # 6.0 también puede escribir propiedades como miembros con cuerpo de expresión

public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call. // Instead of public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }

Ver: .NET Compiler Platform ("Roslyn")
Nuevas características de lenguaje en C # 6

Comenzando con C # 7.0 , ambos, getter y setter, se pueden escribir con cuerpos de expresión:

public string Name { get => _name; // getter set => _name = value; // setter }

Tenga en cuenta que en este caso el colocador debe ser una expresión. No puede ser una declaración. El ejemplo anterior funciona, porque en C #, una asignación se puede usar como una expresión o como una declaración. El valor de una expresión de asignación es el valor asignado donde la asignación en sí es un efecto secundario. Esto le permite asignar un valor a más de una variable a la vez: x = y = z = 0 es equivalente a x = (y = (z = 0)) y tiene el mismo efecto que las declaraciones x = 0; y = 0; z = 0; x = 0; y = 0; z = 0; .


public List<DealsCategory> DealCategory { get; set; } int categoryid = Convert.ToInt16(dealsModel.DealCategory.Select(x => x.Id));


var list = new List<MyClass>(); var item = list.Find( x => x.GetId() == "TARGET_ID" );

o si solo hay uno y quiere hacer cumplir que algo como SingleOrDefault puede ser lo que quiera

var item = list.SingleOrDefault( x => x.GetId() == "TARGET" ); if ( item == null ) throw new Exception();