arrays - 无法将托管数组转换为 IReadOnlyList

标签 arrays c++-cli

以下 C# 代码编译并运行得很好:

private static IReadOnlyList<int> Foo()
{
    return new int[10];
}

但是,(假定的)等效 C++/CLI 代码会出现编译错误:

Error C2440 'return': cannot convert from 'cli::array<int,1> ^' to 'System::Collections::Generic::IReadOnlyList<int> ^'

static IReadOnlyList<int>^ Foo()
{
    return gcnew array<int>(10);
}

该错误消息听起来好像 C++/CLI 有自己的特殊数组类,它在幕后使用,这与 C# 的做法不同,并且它不实现 IReadOnlyList(或 IList 或 ICollection;IEnumerable 实现)不过,工作)。那是对的吗?有解决办法吗?

最佳答案

显然您需要做的就是添加显式转换:

static IReadOnlyList<int>^ Foo()
{
    return (IReadOnlyList<int>^)gcnew array<int>(10);
}

(我确认这不会破坏运行时)

关于arrays - 无法将托管数组转换为 IReadOnlyList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57495493/

相关文章:

pdf - 使用 pdfsharp 添加 acroform

include - #using、#include 和 'assembly references'——它们是什么以及它们之间的关系?

opencv - opencv关闭相机

.net - 移植到 VS2015/.NET 4.6 后,C++/CLI DLL 在加载时崩溃

c++ - 如何使用 C 字符串读取 .txt 文件?

c - 修改传递给函数的二维数组

c++ - 如何在 C++ 结构中的结构数组中填充字符串

python - for循环没有执行两次

c++ - C++中数组的指针

multithreading - 使用 C++/CLI 从线程更新状态栏