Usa un'espressione lambda
MyClass result = list.Find(x => x.GetId() == "xy");
Nota: C # ha una sintassi incorporata per le proprietà. Invece di scrivere metodi getter e setter (come potresti essere abituato da Java), scrivi
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
è una parola chiave contestuale nota solo nella funzione di accesso set. Rappresenta il valore assegnato alla proprietà.
Poiché questo modello viene spesso utilizzato, C # fornisce proprietà implementate automaticamente . Sono una versione breve del codice sopra; tuttavia, la variabile di supporto è nascosta e non accessibile (è comunque accessibile dall'interno della classe in VB).
public string Id { get; set; }
Puoi semplicemente utilizzare le proprietà come se stessi accedendo 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.
Utilizzando le proprietà, cercheresti gli elementi nell'elenco come questo
MyClass result = list.Find(x => x.Id == "xy");
Puoi anche utilizzare proprietà implementate automaticamente se hai bisogno di una proprietà di sola lettura:
public string Id { get; private set; }
Ciò ti consente di impostare Id
la classe all'interno ma non dall'esterno. Se è necessario impostarlo anche in classi derivate, è anche possibile proteggere il setter
public string Id { get; protected set; }
Infine, è possibile dichiarare le proprietà come virtual
e sovrascriverle nelle classi derivate, consentendo di fornire diverse implementazioni per getter e setter; proprio come per i metodi virtuali ordinari.
A partire da C # 6.0 (Visual Studio 2015, Roslyn) è possibile scrivere proprietà automatiche solo getter con un inizializzatore inline
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
È inoltre possibile inizializzare le proprietà solo getter all'interno del costruttore. Getter sola auto-proprietà sono vere proprietà di sola lettura, a differenza di proprietà auto-implementato con un setter privato.
Funziona anche con le proprietà automatiche di lettura-scrittura:
public string Id { get; set; } = "A07";
A partire da C # 6.0 è anche possibile scrivere proprietà come membri con corpo di espressione
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
Vedere: Nuove funzionalità per il linguaggio di .NET Compiler Platform ("Roslyn")
in C # 6
A partire da C # 7.0 , entrambi, getter e setter, possono essere scritti con corpi di espressione:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Nota che in questo caso il setter deve essere un'espressione. Non può essere un'affermazione. L'esempio sopra funziona, perché in C # un'assegnazione può essere usata come espressione o come istruzione. Il valore di un'espressione di assegnazione è il valore assegnato in cui l'assegnazione stessa è un effetto collaterale. Ciò consente di assegnare un valore a più di una variabile contemporaneamente: x = y = z = 0
è equivalente x = (y = (z = 0))
e ha lo stesso effetto delle istruzioni x = 0; y = 0; z = 0;
.
La prossima versione del linguaggio, C # 9.0, probabilmente disponibile a novembre 2020, consentirà proprietà di sola lettura (o meglio inizializzabili una volta) che è possibile inizializzare in un inizializzatore di oggetti. Questo non è attualmente possibile con le proprietà solo getter.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
Saprebbe già che stai cercando la chiave primaria. Solo per info.