Какой самый простой способ пропустить строку в управляемой строке ^ VC ++ - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь пропустить строку в управляемом Visual C ++ массиве String ^ или String ^, но не нашел простого способа сделать это.Фактически, я потратил два дня на то, что в C # заняло бы менее 30 секунд.В C # есть метод .Skip () Enumerable

https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.skip?view=netframework-4.7.2

, и я бы хотел что-то подобное для VC ++, если это возможно.

Вот что я пробовал:

    auto a = gcnew cli::array<String ^>{ "Alpha", "Bravo", "Charlie", "Delta" };

    auto xs = gcnew System::Collections::Generic::List<String^>(a);

    System::Collections::Generic::IEnumerator<String^>^ e = xs->GetEnumerator();

    e->MoveNext();

^^, который выбрасывает класс исключений System :: EventArgs не имеет члена "MoveNext"

РЕДАКТИРОВАТЬ: я знаю, что вызываетисключение System :: EventArgs не имеет члена "MoveNext" .. использование 'e' в Visual Studio заставляет компилятор думать, что я ссылаюсь на e для EventArgs как в e) click_method .. Я переключился на другое имя, и оно заполняетсякак это: System.Collections.Generic.List`1 + Enumerator [System.String]

Я также пытался ссылаться на System :: Linq, а затем

    System::Collections::Generic::List<String ^>^ _list = gcnew System::Collections::Generic::List<String ^>(System::IO::File::ReadAllLines(filename));

    System::Collections::Generic::List<String ^>^ _list2 = _list->Skip(1);

, что, похоже, будет работатьв C #, но получить следующее исключение

класс System :: Collections :: Generic :: List не имеет пропуска членов

, поэтому библиотека .NET не работает в CLI / C ++

Еще одна вещь, которую я попытался сделать:

    System::Collections::Generic::List<String ^>^ _list = gcnew System::Collections::Generic::List<String ^>(System::IO::File::ReadAllLines(filename));

    System::Collections::Generic::List<String ^>^ _list2 = _list->RemoveAt(0);

, но получила исключение: значение типа "void" нельзя использовать для инициализации сущности типа System :: Collections :: Generic :: List ^

Я пытаюсь сделать это без использования marshal_string, если это возможно, но я открыт для любых предложений, так как я потянул за это волосы, не уверен, что еще попробовать = [

1 Ответ

0 голосов
/ 20 декабря 2018

РЕДАКТИРОВАТЬ: это читается как массив, а не строка ^, но я не мог понять, как это сделать со строкой ^ самостоятельно.

определенно не самый быстрый способ, но это пропускает х числолинии.

Мне надоел CLI / C ++ / VC ++, и я не могу дождаться, чтобы прекратить его использовать (я бы никогда не использовал его в первую очередь и ежедневно пинал себя за то, что не делал этого в C #).

    //read the file to a CLI array (each line is a member)
    auto a = System::IO::File::ReadAllLines("test66.txt");

    //create a List from the array
    auto xs = gcnew System::Collections::Generic::List<String^>(a);

    //create a collection from the List
    System::Collections::Generic::IEnumerator<String^>^ test66 = xs->GetEnumerator();

    //the number of lines we want to skip 
    int x = 0;

    //for loop stopping @ x
    for (int nxt; nxt <= x; nxt++)
    {
        test66->MoveNext();
    }

    //present selected array item to user or you could feed this into a String^
    textBox11->Text = test66->Current;

не стесняйтесь дать лучший ответ.Я не мог найти много информации, так как CLI / C ++ абсолютно ужасен по сравнению с C # и почти любым другим современным языком.(ИМО)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...