我为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 ???
非常感谢!
我会做:
Take
如果您打算使用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。