Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   C# "Array of record" in C#? (https://www.delphipraxis.net/41020-array-record-c.html)

MathiasSimmack 24. Feb 2005 17:20


"Array of record" in C#?
 
Ich habe schon graue Haare vom Suchen im .NET-Framework SDK. Wie kann denn so eine Konstruktion
Delphi-Quellcode:
type
  TEinType = record
    Name          : string;
    SequenceNumber : integer;
  end;

const
  TTypenArray = array[1..2]of TEinType = (
     (Name:"Ein Name"; SequenceNumber:100),
     (Name:"Noch ein Name"; SequenceNumber:200)
  );
in C# machen? Ich hätte da ein paar Bezeichner und Sequenznummern (mehr als 2), die ich gern vorher initialisieren und dann zur Laufzeit bloß entsprechend der Reihe nach aufrufen würde.

LarsMiddendorf 24. Feb 2005 18:25

Re: "Array of record" in C#?
 
Erstmal einen Konstruktor für TEinType:
Code:
struct TEinType
{
  public string Name;
  public int SequenceNumber;
 
  public TEinType(string Name,int SequenceNumber)
  {
    this.Name=Name;
    this.SequenceNumber=SequenceNumber;
  }
}

class ...
{

  TEinType[] TTypenArray = new TEinType[]{new TEinType("Ein Name",100), new TEinType("Noch ein Name",200)};
}

Robert_G 24. Feb 2005 18:30

Re: "Array of record" in C#?
 
Dein Type in c#:
Code:
   public class EineKlasse
   {
      static int fortlaufendeNummer;

      static EineKlasse()
      {
         fortlaufendeNummer = 0;
      }

      int sequenceNumber;

      public int SequenceNumber
      {
         get { return sequenceNumber; }
      }

      public EineKlasse()
      {
         sequenceNumber = fortlaufendeNummer++;
      }
   }
Jetzt gehst du auf File\New\New File\typed HashTable

Der Hashtable verpasst du noch das hier (aus purer Faulheit :zwinker: )
Code:
        public void Add(string key)
        {
            innerHash.Add(key, new EineKlasse());
        }
Und dann kannst du es so benutzen:
Code:
   internal class MainClass
   {
      public static void Main(string[] args)
      {
         EineKlasseHashTable table = new EineKlasseHashTable();
         table.Add("eins");
         table.Add("zwei");
         table.Add("drei");
         table.Add("vier");

         Console.WriteLine(table["eins"].SequenceNumber);
         Console.WriteLine(table["zwei"].SequenceNumber);
         Console.WriteLine(table["drei"].SequenceNumber);
         Console.WriteLine(table["vier"].SequenceNumber);
      }
   }
Aber ich hoffe, dass du da keine Konstanten reinpackst!
Konstanten gehören in enums und nirgenswo anders hin! ;)

MathiasSimmack 24. Feb 2005 18:55

Re: "Array of record" in C#?
 
Nein, das wird die Grundlage für eine separate Klasse für meine Anzeige im PropertyGrid. Ich muss die Sequenznummern allerdings fest vorgeben und nicht der Reihe nach hochzählen, weil diese anderweitig schon so festgelegt sind. Und da geht es eben nicht 1, 2, 3, 4, ... sondern es kann durchaus 100, 200, 500, 600, 800, ... sein.

Wie gesagt, in Delphi hätte ich den Typ deklariert und dann alle Namen und Nummern in ein Array dieses Typs eingetragen. Wenn ich was ändern oder erweitern muss, dann kann ich´s an einem zentralen Ort machen und muss mich nicht im Programmcode damit befassen.

MathiasSimmack 24. Feb 2005 19:54

Re: "Array of record" in C#?
 
Ich hab´s mir anders überlegt. Vorrecht des Programmierers. :stupid: Ich haue das ganze Zeug in eine XML-Datei, die ich dann einfach auslese. Dann kann ich gleich die benötigten Klassen für den Tree-View und das PropertyGrid erzeugen und spare mir das Hantieren mit dieser Hilfsklasse.

@Robert: Das wird einer von den etwas schwierigeren Editoren. ;)

Robert_G 24. Feb 2005 21:52

Re: "Array of record" in C#?
 
Ich kapriere auch gar nicht wo du die statischen Zahlen hernimmst? :gruebel:
Zum Thema XML: Schaue dir mal den XmlSerializer an. Prima Sache, da du mit 1-2 Zeilen eine XmlDatei in eine Instanz oder sogar eine ganze Collection bekommst. :)

MathiasSimmack 25. Feb 2005 09:05

Re: "Array of record" in C#?
 
Zitat:

Zitat von Robert_G
Ich kapriere auch gar nicht wo du die statischen Zahlen hernimmst? :gruebel:

Microsoft Platform SDK -> Setup -> Windows Installer -> Installer Database -> Using a Sequence Table -> Suggested whatever. :) In einem Skript interessieren mich diese Standardaktionen nur, weil ich sie brauche, um eigene Aktionen passend einzuklinken:
Code:
<Custom Action="MeineFehlerMeldung" After="AppSearch"/>
In einem Editor muss ich schätzungsweise einen Knotenpunkt anbieten (Tree-View), damit der geneigte Anwender seine Aktion schön bequem dort einfügen kann. *händezumhimmelstreck* Seid verflucht, RAD und WYSIWYG! :stupid:

Wenn ich allerdings so darüber nachdenke ... :gruebel: ... Also ich brauche eigentlich keinen Editor. Ich komme auch mit dem Skript klar. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz