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 métodos getter y setter (como puede que esté acostumbrado en Java), escriba
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
es una palabra clave contextual conocida solo en el descriptor de acceso del conjunto. Representa el valor asignado a la propiedad.
Dado que este patrón se usa con frecuencia, 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 (sin embargo, es accesible desde dentro de la clase en VB).
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 configurar el Id
dentro de la clase pero no desde fuera. Si necesita configurarlo también en clases derivadas, también puede proteger el establecedor
public string Id { get; protected set; }
Y finalmente, 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 propiedades automáticas solo para captadores con un inicializador en línea
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
En su lugar, también puede inicializar propiedades de solo captador dentro del constructor. Las propiedades automáticas de solo captador son verdaderas propiedades de solo lectura, a diferencia de las propiedades implementadas automáticamente con un configurador privado.
Esto también funciona con propiedades automáticas 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); } }
Consulte: Plataforma del compilador .NET ("Roslyn")
Nuevas características del lenguaje en C # 6
A partir de C # 7.0 , tanto getter como 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 establecedor 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 expresión o 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 x = (y = (z = 0))
y tiene el mismo efecto que las declaraciones x = 0; y = 0; z = 0;
.
La próxima versión del lenguaje, C # 9.0, probablemente disponible en noviembre de 2020, permitirá propiedades de solo lectura (o mejor inicializar una vez) que puede inicializar en un inicializador de objeto. Actualmente, esto no es posible con propiedades exclusivas de captadores.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
ya sabría que está buscando una clave principal. Sólo por información.