以下 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/