无法将托管数组转换为 IReadOnlyList

Can't convert managed array to IReadOnlyList

以下 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 有它自己的特殊数组 class 它在幕后使用,这与 C# 所做的不同并且没有实现 IReadOnlyList(或 IList , 或 ICollection;不过 IEnumerable 确实有效)。那是对的吗?有解决方法吗?

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

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

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