Entwickler-Ecke

C# - Die Sprache - Enum Eintrag mit Klasse identifizieren.


Garby - Mo 16.01.06 17:18
Titel: Enum Eintrag mit Klasse identifizieren.
Hallo,

Der Titel ist ein wenig komisch ;)

Ich möchte in C# einen Enum Eintrag mittels eines Klassen Arrays einer Klasse zuordnen.

In Delphi schaut das so aus:

Delphi-Quelltext
1:
2:
3:
4:
type
  TEnum = (abButton, abListe);
const
  EnumTrans: array[TEnum] of TClass = (TButton, TList);
Anwendungsbeispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var abc: TObject;
begin
  abc := TList.Create;
//    abc := TButton.Create(nil);
  try
    if abc is EnumTrans[abListe] then
      ShowMessage('Liste')
    else if abc is EnumTrans[abButton] then
      ShowMessage('Button');
  finally
    abc.Free;
  end// end finally
end;
Wie würdet ihr so was in C# realisieren?

Danke
Walter


Xqgene - Mi 25.01.06 10:12

hm..ich verstehe nicht ganz, wozu hier Enum überhaupt gut ist, liegt wohl aber an meinen verstaubten Delphi Kenntnissen.

ich würde es einfach so machen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
object o = new Button();
.....

if (o is Button)
{
  // TODO
}
if (o is ArrayList)
{
  // TODO
}


Garby - Mi 25.01.06 11:04

Hallo,

Dieses Anwendungsbeispiel zeigt den Nutzen des Enums besser:

Delphi-Quelltext
1:
with EnumTrans[abListe].Create(nildo begin...                    


Xqgene - Mi 25.01.06 11:51

wenn es nur um das Speichern der Objekte in einer Liste geht, kann man eine Hashtable nutzen oder noch besser (ab .NET 2.0) eine SortedList


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        enum MyEnum
        {
            Button,
            Label,
            Form
        }
.....
        SortedList<MyEnum, object> list = new SortedList<MyEnum, object>();
.....
        list[MyEnum.Button] = new Button();
.....
        if (list[MyEnum.Button] is Button)
                MessageBox.Show("OK");


Problem ist das Erzeugen der Objekte a lá


Delphi-Quelltext
1:
EnumTrans[abListe].Create(nil)                    


so geht es in C# ohne Weiteres nicht.

eine Möglichkeit wäre die Reflection zu nutzen


Garby - Mi 25.01.06 14:53

OK, Danke.

Ich werde mir halt was anderes ausdenken müssen.

Walter


Xqgene - Mi 25.01.06 15:00

was willst du denn erreichen?