【问题标题】:How to address co-variant array conversion?如何解决协变数组转换?
【发布时间】:2012-02-15 15:43:13
【问题描述】:

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

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[] 的协变数组转换可能会导致 写操作的运行时异常

【问题讨论】:

  • 是什么给了你这个警告?我没有看到任何使用 object[]...
  • ReSharper 发出警告。

标签: c#


【解决方案1】:

知道了 - 问题是您传递 string[] 就好像它是委托的 array 参数,而实际上您希望它作为 single em> 参数:

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

任何给你警告的东西都是警告你 string[]object[] 的隐式转换,这是合理的,因为带有 object[] 参数的东西可能尝试写:

array[0] = new object();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 2015-07-13
    • 1970-01-01
    • 2020-10-17
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多