Используйте лямбда-выражение
MyClass result = list.Find(x => x.GetId() == "xy");
Примечание: C # имеет встроенный синтаксис для свойств. Вместо написания методов получения и установки (как вы могли бы привыкнуть к Java), напишите
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
- это контекстное ключевое слово, известное только в наборе доступа. Он представляет значение, присвоенное свойству.
Поскольку этот шаблон часто используется, C # предоставляет автоматически реализуемые свойства . Это краткая версия кода выше; однако вспомогательная переменная скрыта и недоступна (однако она доступна из класса в VB).
public string Id { get; set; }
Вы можете просто использовать свойства, как если бы вы обращались к полю:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
Используя свойства, вы будете искать элементы в списке, как это
MyClass result = list.Find(x => x.Id == "xy");
Вы также можете использовать автоматически реализованные свойства, если вам нужно свойство только для чтения:
public string Id { get; private set; }
Это позволяет вам установить Id
внутри класса, но не снаружи. Если вам нужно установить его и в производных классах, вы также можете защитить установщик
public string Id { get; protected set; }
И, наконец, вы можете объявить свойства как virtual
и переопределить их в производных классах, что позволяет вам предоставлять различные реализации для методов получения и установки; так же, как для обычных виртуальных методов.
Начиная с C # 6.0 (Visual Studio 2015, Roslyn), вы можете писать авто-свойства только для получателя с помощью встроенного инициализатора
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
Вместо этого вы можете инициализировать свойства только для получения в конструкторе. Авто-свойства только для получателя: true свойства только для чтения, в отличие от автоматически реализуемых свойств с частным установщиком.
Это также работает с автоматическими свойствами чтения-записи:
public string Id { get; set; } = "A07";
Начиная с C # 6.0, вы также можете писать свойства как члены с выражением
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
См .: Платформа компилятора .NET ("Roslyn")
Новые функции языка в C # 6
Начиная с C # 7.0 , оба, getter и setter, могут быть записаны с телами выражений:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Обратите внимание, что в этом случае установщик должен быть выражением. Это не может быть утверждение. Приведенный выше пример работает, потому что в C # присваивание может использоваться как выражение или как выражение. Значением выражения присваивания является присвоенное значение, где само присвоение является побочным эффектом. Это позволяет вам присвоить значение более чем одной переменной одновременно: x = y = z = 0
эквивалентно x = (y = (z = 0))
и имеет тот же эффект, что и операторы x = 0; y = 0; z = 0;
.