如何处理协变数组转换?

7
我有一个图像拼接任务,可能需要很长时间,因此我将其作为单独的任务运行,如下所示:
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
什么导致了你收到这个警告?我没有看到任何使用 object[] 的地方... - Jon Skeet
ReSharper正在发出警告。 - jacknad
1个回答

13

了解了 - 问题在于你将 string[] 当作委托的参数数组来传递,但实际上你想要它作为一个单一的参数:

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

警告你的东西是在警告你关于将string[]隐式转换为object[],这是合理的,因为接受object[]参数的东西可能会尝试写入:

array[0] = new object();
在这种情况下,这不是问题......但尝试将每个字符串映射到单独的委托参数中的事实确实是一个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接