隐式和显式转换

时间:2015-04-21 01:52:07

标签: c# list object

我开始这样的话:

ThreadPool.QueueUserWorkItem(new WaitCallback(SetupThread), (object)new object[] { IP, lc });

使用该对象来调用参数。 IP很容易恢复,但lc是一个列表。我怎么能接受这个论点?

    private void SetupThread(object obj)
    {
        object[] arg = obj as object[];
        String IPadress = Convert.ToString(arg[0]);
        List<String> listcom = arg[1];

        theNDDssh.RunListCom(IPadress,
                             listcom,
                                    sshqueue,
                                    error
                            );

编译器说有明确的转换。 arg [1]无法隐式转换。

3 个答案:

答案 0 :(得分:2)

List<string> listcom = (List<string>)arg[1];

它是一个简单的演员。您可以使用第一个参数而不是转换调用执行相同的操作。

答案 1 :(得分:0)

或者,您可以使用Tuple<T,T>

ThreadPool.QueueUserWorkItem(new WaitCallback(SetupThread), Tuple.Create(IP, lc));

将其强制转换回目标方法,然后只访问其中的每个项目:

private void SetupThread(object obj)
{
    var args = (Tuple<string, List<string>>)obj;

    String IPadress = args.Item1;
    List<String> listcom = args.Item2;

    ...

答案 2 :(得分:0)

您需要将其转换为

(List<String>)