Ответ 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, и для членов интерфейса нет ссылочных тем, которые доступны только путем литья массива в тип общего интерфейса (явный реализация интерфейса). Ключевое значение, которое нужно учитывать при создании массива на одном из этих интерфейсов, - это элементы, которые добавляют, вставляют или удаляют элементы throwNotSupportedException.
Как вы можете видеть, актер должен выполняться явно в С++ во время выполнения, например.
List<Process^>^ processList = gcnew List<Process^>(
safe_cast<IEnumerable<T> ^>(
Process::GetProcessesByName(this->processName)));