如何用split.take获取字符串序列的前n个元素? VB .net

问题描述 投票:0回答:2

我为AutoCAD和CIVIL 3D创建了一个.dll插件。

我正在尝试检索这些序列的第一个元素:

“Autodesk AutoCAD 2019 - [图1]”我只想获得“Autodesk AutoCAD 2019”(我想要前3个元素)和“Autodesk CIVIL 3D 2019 - [图1]”我只想获得“Autodesk CIVIL 3D 2019” 。 (我想要前4个元素)

我通过使用Process.GetCurrentProcess().MainWindowTitle获取这些序列,Process.GetCurrentProcess().MainWindowTitle.Substring(0, 22) 正在检索我正在使用的应用程序的窗口标题。

但是,有时候我正在使用AutoCAD,其他我正在使用CIVIL 3D,我想将它们的应用程序名称检索为字符串,显示在消息框中,告诉我目前正在使用哪个应用程序。

我尝试过:

Process.GetCurrentProcess().MainWindowTitle.Split.Take(4)

但是当我在autocad开始时或关闭时显示消息框时,这个不可靠。它仅在我在开始和结束之间显示消息框时才有效。

我想我应该尝试:

Process.GetCurrentProcess().MainWindowTitle.Take(4)

要么

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/return-or-skip-elements-in-a-..

但我似乎无法让它工作尽管已经试图理解它(Dim originalString As String = Process.GetCurrentProcess().MainWindowTitle Dim splittedString As String() = originalString.Split("-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) Dim productName As String = splittedString(0) 。)。

我该怎么办Take ???

非常感谢!

.net vb.net split autocad take
2个回答
1
投票

我会做:

Take

0
投票

如果您打算使用IEnumerable(Of T),那么您必须确保为其提供正确的输入。如果你这样做,那么它将提供正确的输出。你真的知道这些输入和输出是什么吗?输入是IEnumerable(Of T),输出是另一个Process.GetCurrentProcess().MainWindowTitle.Take(4) ,它包含指定数量的项目或原始列表中的所有项目,这些项目都较小。这显然是错误的:

MainWindowTitle

因为String是一个IEnumerable(Of Char)所以这意味着你的输入将是一个Process.GetCurrentProcess().MainWindowTitle.Split.Take(4) 所以你只需要获得字符串中的前四个字符。这看起来更有希望:

Split

你真的检查过Split会回复你的想法吗?当代码按预期工作时,绝不假设任何事情。校验。

顺便说一句,GetCurentProcess是一种方法,而不是财产。在没有提供参数时你不必在方法调用上使用括号,但是你正在为Split这样做,那你为什么不为Split呢?不一致总是很糟糕。决定你要做什么,并在每种情况下做。就个人而言,为了清楚起见,我总是在方法调用中包含括号,无论是否存在参数。我不会在没有参数的构造函数上使用它们,因为它可能与数组创建一目了然。

无论如何,正如我所说,如果Take返回正确的输入,那么IEnumerable(Of T)将提供正确的输出。问题是,你知道如何处理这个输出吗?你想要它做什么?需要对String进行枚举,以确切如何做到这一点取决于您最终想要达到的目标。例如,如果你想将这些子串重新组合成一个String.Join,它们之间有空格,那么你可以调用IndexOf并将列表作为第二个参数传递。当然,如果你打算这样做,那么你最好还有我的其他建议,即Split和qazxswpoi。

© www.soinside.com 2019 - 2024. All rights reserved.