我在想,为什么这个代码不会在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)));
您需要使用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)));