初始化列表 在CLR C ++数组?(Initialize List with arra

2019-09-21 18:42发布

我在想,为什么这个代码不会在C ++ / CLI工作,但在C#该死的容易吗?

List<Process^>^ processList = gcnew List<Process^>(
  Process::GetProcessesByName(this->processName)););

错误C2664: '系统::类别::通用::一览::列表(系统::类别::通用::的IEnumerable ^)':不能从转换参数1 'CLI ::阵列^' 到“系统::类别::一般:: IEnumerable的^”

这里是我想出。 做了非常清楚。 :)

List<Process^>^ processList = gcnew List<Process^>(
  safe_cast<System::Collections::Generic::IEnumerable<Process^>^>
    (Process::GetProcessesByName(this->processName)));

Answer 1:

您需要使用safe_cast 。 按照上MSDN文档System::Array

重要

与.NET Framework 2.0开始,Array类实现System.Collections.Generic::IList<T> System.Collections.Generic::ICollection<T>System.Collections.Generic::IEnumerable<T>通用接口。 这些实现提供给数组在运行时,因此不能在一个文档生成工具中可见。 其结果是,通用的接口不会出现在Array类声明的语法,并有对接口的成员只能由铸造阵列的通用接口类型(显式接口实现)访问没有提及的话题。 关键的一点需要注意,当你施放一个数组这些接口之一是,其成员添加,插入或删除元素抛出NotSupportedException

正如你可以看到在运行时,演员必须用C做明确++,如

List<Process^>^ processList = gcnew List<Process^>(
    safe_cast<IEnumerable<T> ^>(
        Process::GetProcessesByName(this->processName)));


文章来源: Initialize List with array in CLR C++?