Список C # Найти «Объект» - PullRequest
       2

Список C # Найти «Объект»

0 голосов
/ 06 сентября 2018

Вероятно, простой вопрос, но уже поздно ночью, надеюсь, кто-нибудь ударит меня по затылку

Основной класс содержит несколько списков классов

Скрипт находит то, на что нажали, сохраняет его как тип объекта

Script выполняет сравнение GetType и запускает код, специфичный для класса

Как мне сделать List.Find(the selected object)

Код по запросу;

object selectedObject; // Set by mousehandler (this works)
List<MyClass> mcList = new List<MyClass>; // Populated (this works)
if (selectedItem.GetType() == typeof(MyClass)) { CallThisMethod(); }; // (this works)
private void method() 
{
   // MyClass mc = mcList.Find( selectedObject );
}

1 Ответ

0 голосов
/ 06 сентября 2018

Почему бы вам не разыграть его?

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...