Utiliser une expression lambda
MyClass result = list.Find(x => x.GetId() == "xy");
Remarque: C # a une syntaxe intégrée pour les propriétés. Au lieu d'écrire des méthodes getter et setter (comme vous pourriez être habitué à partir de Java), écrivez
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
est un mot clé contextuel connu uniquement dans l'accesseur set. Il représente la valeur attribuée à la propriété.
Étant donné que ce modèle est souvent utilisé, C # fournit des propriétés implémentées automatiquement . Il s'agit d'une version courte du code ci-dessus; cependant, la variable de sauvegarde est masquée et non accessible (elle est cependant accessible depuis la classe dans VB).
public string Id { get; set; }
Vous pouvez simplement utiliser les propriétés comme si vous accédiez à un champ:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
En utilisant les propriétés, vous recherchez des éléments dans la liste comme ceci
MyClass result = list.Find(x => x.Id == "xy");
Vous pouvez également utiliser des propriétés implémentées automatiquement si vous avez besoin d'une propriété en lecture seule:
public string Id { get; private set; }
Cela vous permet de définir le Id
dans la classe mais pas de l'extérieur. Si vous devez également le définir dans des classes dérivées, vous pouvez également protéger le setter
public string Id { get; protected set; }
Et enfin, vous pouvez déclarer les propriétés comme virtual
et les remplacer dans les classes dérivées, ce qui vous permet de fournir différentes implémentations pour les getters et les setters; comme pour les méthodes virtuelles ordinaires.
Depuis C # 6.0 (Visual Studio 2015, Roslyn), vous pouvez écrire des propriétés automatiques en lecture uniquement avec un initialiseur en ligne
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
Vous pouvez également initialiser les propriétés en lecture seule dans le constructeur à la place. Les propriétés automatiques accessibles uniquement sont lecture seule vraies lecture seule, contrairement aux propriétés implémentées automatiquement avec un setter privé.
Cela fonctionne également avec les propriétés automatiques en lecture-écriture:
public string Id { get; set; } = "A07";
À partir de C # 6.0, vous pouvez également écrire des propriétés en tant que membres à corps d'expression
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
Voir: .NET Compiler Platform («Roslyn»)
Nouvelles fonctionnalités du langage dans C # 6
À partir de C # 7.0 , les deux, getter et setter, peuvent être écrits avec des corps d'expression:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Notez que dans ce cas, le setter doit être une expression. Cela ne peut pas être une déclaration. L'exemple ci-dessus fonctionne, car en C #, une affectation peut être utilisée comme expression ou comme instruction. La valeur d'une expression d'affectation est la valeur affectée où l'affectation elle-même est un effet secondaire. Cela vous permet d'affecter une valeur à plusieurs variables à la fois: x = y = z = 0
équivaut à x = (y = (z = 0))
et a le même effet que les instructions x = 0; y = 0; z = 0;
.
La prochaine version du langage, C # 9.0, probablement disponible en novembre 2020, autorisera les propriétés en lecture seule (ou mieux initialiser une fois) que vous pourrez initialiser dans un initialiseur d'objet. Ceci n'est actuellement pas possible avec les propriétés de lecture uniquement.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
Il saurait déjà que vous recherchez une clé primaire. Juste pour info.