2011-09-06 155 views
0

我想学习类atm,这里是我想出的:通过对象数组访问对象

创建关卡的级别。这个类有一个对象数组,可以填充其他类的房间(raeume)。现在,我想在插入它们之后从房间访问对象数组中的对象。以下是我想要键入:

wohnung.rooms[i].raumname.toString(); 

这里有两类

class raum 
{ 
    static object[] o_nebenraum = new object[3]; //N-O-S-W 
    static string s_raumname = ""; 
    public object[] nebenraume 
    { 
     get 
     { 
      return o_nebenraum; 
     } 
     set 
     { 
      o_nebenraum = value; 
     } 
    } 
    public string raumname 
    { 
     get 
     { 
      return s_raumname; 
     } 
     set 
     { 
      s_raumname = value; 
     } 
    } 
} 

class level 
{ 
    static object[] o_rooms = new object[100]; 

    public object[] rooms 
    { 
     get 
     { 
      return o_rooms; 
     } 
     set 
     { 
      o_rooms = value; 
     } 
    } 
} 

这是我如何设置好一切。

level wohnung = new level(); 
     raum keller = new raum(); 
     raum wohnzimmer = new raum(); 
     raum kueche = new raum(); 
     raum schlafzimmer = new raum(); 
     wohnung.rooms[0] = keller; 
     wohnung.rooms[1] = wohnzimmer; 
     wohnung.rooms[2] = kueche; 
     wohnung.rooms[3] = schlafzimmer; 
     keller.raumname = "Keller"; 
     wohnzimmer.raumname = "Wohnzimmer"; 
     kueche.raumname = "Küche"; 
     schlafzimmer.raumname = "Schlafzimmer"; 
     for (uint i = 0; i < 3; i++) 
     { 
      Console.WriteLine("Wohnung beinhaltet jetzt " + *MISSING CODE PART, I WANT TO GET THE .raumname out of the object array from wohnung.room*); 
     } 
     Console.ReadKey(); 
+0

为什么's_raumname','o_nebenraum'和'o_rooms'静态?为什么'o_nebenraum'的类型'object []'而不是'raum []'?为什么使用数组而不是List? –

+0

你应该在任何地方访问它们,o_nebenraum现在是raum [],我现在还使用列表如下所示: –

+0

如果's_raumname'是静态的,这将导致一个“奇怪”的行为,所有房间将具有相同的名称(最后一个被分配 - 在这种情况下“Schlafzimmer”) –

回答

1

试试这个(在for循环):

Console.WriteLine("Wohnung beinhaltet jetzt " + (wohnung.rooms[i] as raum).raumname); 

你会使用泛型会更好,虽然在这种情况下,一流的水平,现在看起来像:

class level 
{  
    static List<raum> o_rooms = new List<raum>(); 
    public List<raum> rooms 
    {   
     get   {    return o_rooms;   }   
     set   {    o_rooms = value;   }  
    } 
} 

for环能可以用一个foreach循环替换如下:

foreach(raum room in wohnung.rooms) 
{ 
    Console.WriteLine("Wohnung beinhaltet jetzt " + room.raumname); 
} 
+0

对我来说最简单的方法和此刻100%可以理解:) –

+0

如果'列表 o_rooms'是静态的,'level'的每个实例都有相同的房间。顺便说一下:你的公共财产没有名字... –

+0

我重写了它,它现在工作正常,也没有静态:) –

2

你必须使用通用类型化列表List<T>See on MSDN),而不是数组,在这种情况下,你将有索引访问的类型列表元素

所以不是:

static object[] o_rooms = new object[100];  
public object[] rooms 

用途:

static IList<raum> o_rooms = new List<Raum>(100);  
public IList<raum> rooms