在托管字符串中跳过行的最简单方法是什么?^ VC ++

时间:2018-12-18 22:34:07

标签: string list linq visual-c++ skip

我试图在Visual C ++管理的String ^或String ^数组中跳过一行,但是我没有找到任何简便的方法。实际上,我花了两天时间在C#中花费不到30秒的时间。 C#Enumerable中有一个方法.Skip()

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” ..在Visual Studio中使用'e'会使编译器认为我是在e)click_method中引用EventArgs的e。我切换到另一个名称,它的填充方式如下: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 :(得分:0)

编辑:这不是一个数组,而是一个String ^,但我不知道该如何单独使用String ^。

绝对不是最快的方法,但这会跳过x行。

我对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;

随意给出更好的答案。我找不到太多信息,因为与C#和几乎所有其他现代语言相比,CLI / C ++绝对糟糕。 (IMO)