Почему бы вам не разыграть его?
if (selectedItem is MyClass selectedItemMyClassCasted)
{
CallThisMethod(selectedItemMyClassCasted);
}; // (this works)
private void CallThisMethod(MyClass mc)
{
//handle mc
}
Вы также можете использовать последнее сопоставление с образцом коммутатора:
switch(selectedItem)
{
case MyClass myClassItem:
CallThisMethod(myClassItem);
break;
case Class2 class2Item:
Method2(class2Item);
break;
...
default:
throw new ArgumentException(nameof(selectedItem));
}
Как использовать метод поиска:
List<object> lll = new List<object>();
object selectedElement;
...
lll.Find((x) => x.Equals(selectedElement));
Но я бы использовал FirstOrDefault, поскольку Find может генерировать исключение Argument, и нет смысла его вызывать:
var result = lll.FirstOrDefault((x) => x.Equals(selectedElement));
if (result != null)
{
//do the stuff
}