Rya*_*yan 1 c# generics collections loops c#-4.0
考虑以下代码,可以使用循环为每个唯一的机器添加公共服务.
internal static List<MyClass> Mc = new List<MyClass>();
public class MyClass : OtherClass
{
public string Machine { get; set; }
public string Service { get; set; }
public void AddProcessDetails()
{
Mc.Add(new MyClass { Machine = server1, Service = "notepad" });
Mc.Add(new MyClass { Machine = server2, Service = "notepad" });
Mc.Add(new MyClass { Machine = server2, Service = "foo" });
}
Run Code Online (Sandbox Code Playgroud)
因此,如果有一个名为"bar"的公共服务,我如何循环遍历此列表,获取每个唯一的计算机名称,然后将该计算机名称和服务添加到列表中?
您可以使用一些LINQ:
var query = Mc.Select(m => m.Machine).Distinct().ToArray();
foreach (string m in query)
Mc.Add(new MyClass { Machine = m, Service = "bar" });
Run Code Online (Sandbox Code Playgroud)
或者,您可以Select使用新对象向项目添加另一个,然后通过List.AddRange以下方式添加它们:
var query = Mc.Select(m => m.Machine)
.Distinct()
.Select(m => new MyClass { Machine = m, Service = "bar" })
.ToArray();
Mc.AddRange(query);
Run Code Online (Sandbox Code Playgroud)
通常查询是针对另一个源的,但在这种情况下,因为我们查询相同的列表,您需要立即使用ToArray()或执行查询ToList(),而不是LINQ通常的延迟(延迟)执行.否则,您将遇到InvalidOperationException集合正在查询以及查询源也正在被修改的问题.