0

我现在再次在 .NET 中编码时生疏了,我试图避免For Each循环,玩Array.Findall.

我想获取机器上安装的所有服务的数组,然后传递一个字符串来搜索它的友好显示名称以查找任何匹配项;如果找到,则返回匹配项及其实际服务名称。

即传递字符串“Calibre”,它将在所有服务中搜索显示名称中包含“Calibre”的任何服务。我这样做是一种“模糊搜索”,以防实际服务名称未知,并且如果碰巧有多个与传递的字符串匹配,则不会启动一堆服务/停了下来。

我有:

Dim strServiceName = "Calibre"  
Dim scServices() As ServiceController = ServiceController.GetServices()  
Dim value2() As String = Array.FindAll(scServices, Function(x) x.DisplayName.ToLower().Contains(strServiceName))

但得到错误:

“System.ServiceProcess.ServiceController 的一维数组”类型的值无法转换为“String 的一维数组”,因为“System.ServiceProcess.ServiceController”不是从“String”派生的。”

我知道我可能遗漏了一些真正简单的东西,但目前它正在躲避我,哈哈。

4

1 回答 1

1

返回的遗传Array.FindAll<T>类型与数组的遗传类型相同,这里为ServiceController。

如果要获取所有服务的名称,其中包含其特定名称DisplayName,则应DisplayName从以下选项中选择 out ServiceController

Dim value2() As String = Array.FindAll(scServices, Function(x) x.DisplayName.ToLower().Contains(strServiceName))
                              .Select(Function(x) x.DisplayName).ToArray()
于 2014-07-24T04:57:59.800 回答