是出於以下3個例子做同樣的事情,我真的很瘦朝第一,但它真的矯枉過正和LINQ的濫用做的事情,這樣,您可以創建一切爲表達我應該用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);
}
你喜歡閱讀和維護哪一個? – 2011-12-22 00:58:20
你是否發現你的隨機數並非全是隨機數?您正在創建許多隨機實例。他們從時鐘播種。如果下一次你的新時鐘沒有移動,那麼......然後呢?它將被播種與上次相同的價值。使用單個隨機實例,每次需要一個隨機數時都不要新建一個實例。 (第一種形式對我來說每一次,順便說一句,因爲LINQ的我幾乎每一個循環) – spender 2011-12-22 00:59:03
我傾向於第一種迄今爲止可讀性,可維護性,這就是我想在不同的語言,但是我認爲這會混淆同事等誰不熟悉這種事情。 – klumsy 2011-12-22 17:59:06