在if语句中使用方法调用程序

bri*_*342 1 c# multithreading listbox method-invocation

我要做的是检查是否选中了列表框中的项目.

该方法正在一个单独的线程上运行,所以我需要使用我相信的方法调用程序.

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

if (list != null)
{
 //do something
}
Run Code Online (Sandbox Code Playgroud)

如果所选项目为null,则此代码将会爆炸,因为字符串列表不会保留它,因此我需要一种方法将前2行组合成if语句检查null.

谢谢

ang*_*son 5

这应该做:

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

//do something
Run Code Online (Sandbox Code Playgroud)

只需将if语句放在匿名方法中即可.

请注意,.ToString极不可能还回null什么,该的文件object.ToString是压倒一切的类型应该实现返回一个方法状态有意义的价值.由于我们已经知道它.SelectedItem不是null,因此检查null并不是必需的.如果你真的想要,你可以保留它,但如果你害怕.ToString应该返回null,我会改为将代码更改为:

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

//do something
Run Code Online (Sandbox Code Playgroud)