odpopwiednik rekordów z delphi w c#

0

Witam,
Wiem że może idę na łatwiznę ale głównie zależy mi na czasie i dlatego o to pytam. Piszę malutką aplikację na Windows Phone w C# wykorzystującą sockety, serwer mam napisany w delphi i przyjmuje on pakiety w postaci rekordów o określonej długości np

type
  TPaczka = record
    Wartosc1: String[50];
    Wartosc2: String[100];
    Wartosc3: String[250];
  end;

W jaki sposób w C# zadeklarować coś takiego? Dla nie znających delphi (dużej większości) jest to rekord (odpowiednik chyba struktury w C# ?) o ustalonym rozmiarze stringów. Dodam że C# się usilnie uczę i dlatego nie wiem jak do tego podejść a w necie nic konkretnego nie znalazłem

1

Na przyklad tak:

struct Paczka
    {
        public Paczka()
        {
            Wartosc1 = new string[2];
            Wartosc2 = new string[20];
        }
        public string[] Wartosc1 { get; set; }
        public string[] Wartosc2 { get; set; }
    }
0

Dla struct w C# można stosować stały rozmiar tablicy, ale dotyczy to typów wartościowych.
Rozwiązaniem Twojego problemu może być wystawienie property o typie

string[]

, które będzie przykrywało prywatne pole w klasie + walidacja długości na set


.
0
FakeAccount napisał(a):

Na przyklad tak:

struct Paczka
{
**** public Paczka()****
{
Wartosc1 = new string[2];
Wartosc2 = new string[20];
}
public string[] Wartosc1 { get; set; }
public string[] Wartosc2 { get; set; }
}

w pogrubionej linni wywala mi Structs cannot contain explicit parameterless constructors o co może chodzić?

0

Chodzi o to, co jest napisane, w C# struktury nie mogą mieć publicznego bezparametrowego konstruktora. W ogóle użycie struktury w tym przypadku to pomysł pozbawiony sensu.

Nie używaj struktur tylko klas, czyli napisz class zamiast struct.

0

Zacząłem dalej rozkminiać to deklaracja string[20] nie jest deklaracja tablicy 20tu stringów?

0

A właśnie nie o to mi chodziło, w delphi string[20] oznacza jednego stringa (nie tablice) o rozmiarze 20 znaków, a record oznacza taką paczkę ze stringami o różny określonych rozmiarach i szukam takiego odpowiednika C#

0

Zobacz sobie na to:
Tablice

0

Więc 20 znaków będziesz miał tak: char[20]
A co do rekrodu, nie ma czegoś takiego. Użyj klasy.

0

Nie wiem do czego Ci to potrzebne ale można by zrobić walidację, obsłużyć w właściwościach albo dodać nawet zwykłego ifa do sprawdzania... i na kilka innych sposobów w zależności do czego jest Ci to potrzebne. Ale jak bym miał zrobić to na chama to wyglądało by to następująco:

using System;
using System.Text;

public class Foo
{
   public Foo()
   {
      Bar = new StringBuilder(10, 10); // Maksymalnie 10 znaków
   }
   public StringBuilder Bar { get; set; }
}

public class Test
{
   public static void Main()
   {
      Foo foo = new Foo();
      foo.Bar.Append("12345");
      //foo.Bar.Append("123456"); // Tutaj rzuci wyjątkiem: System.ArgumentOutOfRangeException
      Console.WriteLine(foo.Bar);
   }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0