如何解决共变阵列转换?

时间:2012-02-15 15:43:13

标签: c#

我有一个图像拼接任务,可能需要花费很多时间,所以我将它作为一个单独的任务来运行

var result = openFileDialog.ShowDialog();
BeginInvoke(new Action<string[]>(StitchTask), openFileDialog.FileNames);

private void StitchTask(string[] fileNames)
{
    // this task could take a lot of time
}

我是否需要担心下面的共变阵列转换警告或我做错了什么?

  

从string []到object []的共变数组转换可能会导致   写操作的运行时异常

1 个答案:

答案 0 :(得分:13)

知道了 - 问题是你传递的string[]好像是代理的数组,当你真的想要它作为参数:

BeginInvoke(new Action<string[]>(StitchTask),
            new object[] { openFileDialog.FileNames });

无论是什么给你发出警告都警告你string[]object[]的隐式转换,这是合理的,因为采用object[]参数的某些内容可能尝试写:

array[0] = new object();

在这种情况下,这不是问题......但是它会尝试将每个字符串映射到单独的委托参数的事实是一个问题。