Другой способ сделать это - передать делегата, который знает, как извлечь свойство name
из любого типа, который вы передаете:
public bool CheckUniqueName<T>(IEnumerable<T> items, string newName, Func<T, string> nameSelector)
{
foreach (var item in items)
{
string name = nameSelector(item);
if (name == newName)
{
return false;
}
}
return true;
}
Назовите его так:
CheckUniqueName(planetsList, "name", planet => planet.name);
Тогда ваше свойство name
не нужно называть name
- его можно называть как угодно.
Я написал длинную версию метода CheckUniqueName
дляясности, но вы можете сократить его, используя linq:
public bool CheckUniqueName<T>(IEnumerable<T> items, string newName, Func<T, string> nameSelector)
{
return !items.Any(item => newName == nameSelector(item));
}
Однако, если вы зайдете так далеко, вы можете также полностью отказаться от метода CheckUniqueName
и вместо этого просто написать:
!plantsList.Any(x => x.name == "name");