我试图在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来执行此操作,但是我愿意接受任何建议,因为我一直在努力解决此问题,不确定是否还可以尝试= [
答案 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)