2010-10-19 32 views
0

我在列表内有一个列表层次结构,在最底部我分配一个十进制值。我需要根据层次结构上方的列表组合来分配此值。特定列表中的每个元素都是一个Enum值,因此一个组合可以是Trees,Buildings,BuildingNumber。另有树木,建筑,建筑价格。将这些组合赋值的最佳方式是什么?为列表内的列表内的列表分配值

我从分配的值来自任意类。然后,我需要对这些值中的一些值进行一些计算,以便以特定组合方式分配新值。

public class Hierarchy1 
{ 
    public List<Hierarchy2> NextList; 
    public Hierarchy1Enum EnumValue; 
} 

public class Hierarchy2 
{ 
    public List<Hierarchy3> NextList; 
    public Hierarchy2Enum EnumValue; 
} 

public class Hierarchy3 
{ 
    public decimal Value; 
    public Hierarchy3Enum EnumValue; 
} 

就是这样的。这些枚举每个都有5-10个值,所以有很多组合。

Hierarchy1将有一个Hierarchy2的列表。如果Hierarchy2Enum中有10个值,则该列表中将有10个元素(因此每个枚举基本上有1个元素)。

+2

你能举一些例子代码吗?我没有得到你的结构 – Onkelborg 2010-10-19 15:02:43

+0

你的结构将在代码中更好地解释,而不是英语... – 2010-10-19 15:10:19

+0

我有点困惑你要找的东西,但根据你的代码,它看起来像你试图实现一个非二叉树结构。这个链接(http://bit.ly/62Vx9I)解释了什么是树数据结构,这个链接(http://bit.ly/10YfuV)解释了如何在c#中实现一个模板化的非二叉树。 – 2010-10-19 15:40:32

回答

0

你的意思是这样的吗?

static void Main(string[] args) 
{ 
    var list = new List<Hierarchy1>(); 

    foreach (Hierarchy1Enum enum1 in Enum.GetValues(typeof(Hierarchy1Enum))) 
    { 
     var item1 = new Hierarchy1(); 

     list.Add(item1); 

     item1.EnumValue = enum1; 
     item1.NextList = new List<Hierarchy2>(); 

     foreach (Hierarchy2Enum enum2 in Enum.GetValues(typeof(Hierarchy2Enum))) 
     { 
      var item2 = new Hierarchy2(); 

      item1.NextList.Add(item2); 

      item2.EnumValue = enum2; 
      item2.NextList = new List<Hierarchy3>(); 

      foreach (Hierarchy3Enum enum3 in Enum.GetValues(typeof(Hierarchy3Enum))) 
      { 
       var item3 = new Hierarchy3(); 

       item2.NextList.Add(item3); 

       item3.EnumValue = enum3; 

       item3.Value = GetValue(enum1, enum2, enum3); 
      } 
     } 
    } 
} 

private static decimal GetValue(Hierarchy1Enum enum1, Hierarchy2Enum enum2, Hierarchy3Enum enum3) 
{ 
    return // Calculate your value from enum1, enum2 and enum3 
} 
+0

是的。我有这么多。但是现在GetValue怎么样?我有3个枚举的组合,但不知道从哪里去。编辑:我的观点是,我知道组合,但我不能为每个组合创建1000条if/else语句。 – Harry 2010-10-19 15:29:47

+0

你说你从任意一个类中获得了值。你可以发布该课程的来源吗? – 2010-10-19 15:31:12

+0

这只是一个双变量的类。我会根据上述组合使用这些变量进行一些计算。 – Harry 2010-10-19 15:32:58