我应该用Linq或传统循环创建复杂的嵌套结构吗?
本文关键字:嵌套 结构 复杂 创建 Linq 传统 循环 我应该 | 更新日期: 2023-09-27 18:18:38
所以在接下来的3个例子中我倾向于第一个但是这样做是不是太过了,是不是滥用了linq你可以把它们都创建成一个表达式
var Rand = new Random();
Hosts = "abcdef".Select(x =>
{
return new HostMachineToUpdate(x + "_Host",
Enumerable.Range(1, Rand.Next(3, 8))
.Select(y => new VirtualMachineToUpdate(x + y.ToString() + "_VM")).
ToList()
);
}
)
.ToList();
//traditional
Hosts = new List<HostMachineToUpdate>();
for (int x = (int)'a'; x < (int)'e'; x++)
{
var Guests = new List<VirtualMachineToUpdate>();
for (int y = 1; y < (new Random().Next(3, 8));y++ )
{
Guests.Add(new VirtualMachineToUpdate((char)x + y.ToString() + "_VM"));
}
Hosts.Add(new HostMachineToUpdate((char) x + "Host",Guests));
}
//very traditional.
Hosts = new List<HostMachineToUpdate>();
int lower = (int)'a';
int upper = (int)'e';
for (int x = lower; x < upper; x++)
{
List<VirtualMachineToUpdate> Guests = new List<VirtualMachineToUpdate>();
int randomItemNum = new Random().Next(3, 8);
for (int y = 1; y < randomItemNum; y++)
{
string vmname = (char)x + y.ToString() + "_VM";
VirtualMachineToUpdate vm = new VirtualMachineToUpdate(vmname);
Guests.Add(vm);
}
string hostname = (char)x + "Host";
HostMachineToUpdate host = new HostMachineToUpdate(hostname, Guests);
Hosts.Add(host);
}
我个人不喜欢你的传统解决方案中使用的cast 的数量。
所有的演员都需要吗?
这段(未经测试的)代码不也能做所需的吗?
// traditional.
Hosts = new List<HostMachineToUpdate>();
foreach (char x in "abcd")
{
List<VirtualMachineToUpdate> Guests = new List<VirtualMachineToUpdate>();
int randomItemNum = new Random().Next(3, 8);
for (int y = 1; y < randomItemNum; y++)
{
Guests.Add(new VirtualMachineToUpdate(x + y.ToString() + "_VM"));
}
Hosts.Add(new HostMachineToUpdate(x + "Host", Guests));
}
我更喜欢声明式方法,所以类似于第一个选项。但我宁愿使用c#语法。比如:
(from x in Enumerable.Range('a', 'e'-'a')
select new HostMachineToUpdate(
(char)x + "_Host",
(from y in Enumerable.Range(1, new Random.Next(3,8))
select new VirtualMachineToUpdate((char)x + y.ToString() + "_VM")).ToList())
.ToList();
感觉很近。可能是一个缺失(或)。
如果您的每个解决方案执行得足够快,那么可以肯定地说,机器无法分辨这些选项之间的区别。
重要的考虑因素归结为代码对人类读者的表达或清晰程度,因为将来有人必须理解、调试或扩展代码。在上面的例子中,试试这个。让代码单独运行两周。当你返回时,决定哪个选项是最容易理解的。
对我自己来说,这是一个现实的检验。在过去,我一直为编写一些聪明的代码而自豪,但实际上,更简单的解决方案才是正确的解决方案。