我现在再次使用.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))
但是得到错误:
类型'1维数组的值 System.ServiceProcess.ServiceController'无法转换为 '1维数组String'因为 'System.ServiceProcess.ServiceController'不是派生自的 '字符串',“
我知道我可能错过了一些非常简单的东西,但此刻它正在躲避我,哈哈。
答案 0 :(得分:1)
返回的Array.FindAll<T>
的遗传类型与数组的遗传类型相同,即ServiceController。
如果您想获得所有服务&#39;在DisplayName
中包含特定名称的名称,您应该从DisplayName
中选择ServiceController
,如下所示:
Dim value2() As String = Array.FindAll(scServices, Function(x) x.DisplayName.ToLower().Contains(strServiceName))
.Select(Function(x) x.DisplayName).ToArray()