Verwenden Sie einen Lambda-Ausdruck
MyClass result = list.Find(x => x.GetId() == "xy");
Hinweis: C # verfügt über eine integrierte Syntax für Eigenschaften. Anstatt Getter- und Setter-Methoden zu schreiben (wie Sie es von Java gewohnt sind), schreiben Sie
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
ist ein kontextbezogenes Schlüsselwort, das nur im Set-Accessor bekannt ist. Es repräsentiert den der Eigenschaft zugewiesenen Wert.
Da dieses Muster häufig verwendet wird, bietet C # automatisch implementierte Eigenschaften . Sie sind eine Kurzversion des obigen Codes; Die Hintergrundvariable ist jedoch ausgeblendet und nicht zugänglich (sie ist jedoch innerhalb der Klasse in VB zugänglich).
public string Id { get; set; }
Sie können Eigenschaften einfach so verwenden, als würden Sie auf ein Feld zugreifen:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
Mithilfe von Eigenschaften würden Sie nach Elementen in der Liste wie folgt suchen
MyClass result = list.Find(x => x.Id == "xy");
Sie können auch automatisch implementierte Eigenschaften verwenden, wenn Sie eine schreibgeschützte Eigenschaft benötigen:
public string Id { get; private set; }
Auf diese Weise können Sie die Id
innerhalb der Klasse festlegen, jedoch nicht von außen. Wenn Sie es auch in abgeleiteten Klassen festlegen müssen, können Sie den Setter auch schützen
public string Id { get; protected set; }
Und schließlich können Sie Eigenschaften als deklarieren virtual
und sie beim Ableiten von Klassen überschreiben, sodass Sie verschiedene Implementierungen für Getter und Setter bereitstellen können. genau wie bei gewöhnlichen virtuellen Methoden.
Seit C # 6.0 (Visual Studio 2015, Roslyn) können Sie mit einem Inline-Initialisierer nur Getter-Auto-Eigenschaften schreiben
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
Sie können stattdessen auch Nur-Getter-Eigenschaften im Konstruktor initialisieren. Nur-Getter-Auto-Eigenschaften sind echte schreibgeschützte Eigenschaften, im Gegensatz zu automatisch implementierten Eigenschaften mit einem privaten Setter.
Dies funktioniert auch mit automatischen Lese- / Schreib-Eigenschaften:
public string Id { get; set; } = "A07";
Ab C # 6.0 können Sie Eigenschaften auch als Ausdruckskörper schreiben
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
Siehe: .NET Compiler Platform ("Roslyn")
Neue Sprachfunktionen in C # 6
Ab C # 7.0 können sowohl Getter als auch Setter mit Ausdruckskörpern geschrieben werden:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Beachten Sie, dass in diesem Fall der Setter ein Ausdruck sein muss. Es kann keine Aussage sein. Das obige Beispiel funktioniert, da in C # eine Zuweisung als Ausdruck oder als Anweisung verwendet werden kann. Der Wert eines Zuweisungsausdrucks ist der zugewiesene Wert, bei dem die Zuweisung selbst ein Nebeneffekt ist. Auf diese Weise können Sie mehreren Variablen gleichzeitig einen Wert zuweisen: x = y = z = 0
Entspricht x = (y = (z = 0))
den Anweisungen und hat dieselbe Wirkung wie diese x = 0; y = 0; z = 0;
.
Die nächste Version der Sprache, C # 9.0, die voraussichtlich im November 2020 verfügbar sein wird, ermöglicht schreibgeschützte (oder besser einmalige) Eigenschaften, die Sie in einem Objektinitialisierer initialisieren können. Dies ist derzeit mit Nur-Getter-Eigenschaften nicht möglich.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
Es würde bereits wissen, dass Sie nach einem Primärschlüssel suchen. Nur zur Info.