Использование метода invoker в операторе if

То, что я пытаюсь сделать, это проверить, выбран ли элемент в списке.

Метод запускается в отдельном потоке, поэтому я должен использовать метод invoker, я считаю.

string list = "";
lbxList.Invoke(new MethodInvoker(delegate { list = lbxList.SelectedItem.ToString(); }));

if (list != null)
{
 //do something
}

этот код будет взорван, если выбранный элемент будет нулевым, потому что список строк не будет содержать его, поэтому мне нужен способ объединить две верхние строки в оператор if, проверяющий нулевое значение.

Спасибо

1 ответ

Решение

Это должно сделать:

string list = "";
lbxList.Invoke(new MethodInvoker(delegate
{
    if (lbxList.SelectedItem != null)
        list = lbxList.SelectedItem.ToString();
}));

//do something

Просто поместите оператор if внутри анонимного метода.

Обратите внимание, что .ToString вряд ли когда-либо вернется null для чего-либо, документацияobject.ToString утверждает, что переопределяющие типы должны реализовывать метод для возврата значимого значения. Поскольку мы уже знаем, что .SelectedItem не является нулевым, проверка на нулевое значение не является действительно необходимой. Вы можете оставить это, если вы действительно хотите, но если вы боитесь, что .ToString должен вернуть ноль, я бы вместо этого изменил код на это:

string list = "";
lbxList.Invoke(new MethodInvoker(delegate
{
    if (lbxList.SelectedItem != null)
        list = lbxList.SelectedItem.ToString() ?? string.Empty;
}));

//do something
Другие вопросы по тегам