无法将托管数组转换为 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);
}
(我确认这不会破坏运行时)
以下 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);
}
(我确认这不会破坏运行时)