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

时间:2013-04-01 11:25:02

标签: c# multithreading listbox method-invocation

我要做的是检查列表框中的项目是否被选中。

该方法正在一个单独的线程上运行,所以我需要使用我认为的方法调用者。

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

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

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

谢谢

1 个答案:

答案 0 :(得分:5)

这应该做:

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

//do something

只需将if语句放在匿名方法中。

请注意,.ToString 非常不可能为任何事情返回nulldocumentation of 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