enum/struct Aufzählung/Verwendung von Konstanten byte und char, gibt es andere, elegantere Möglichkeiten?

12/12/2007 - 11:52 von Rudi | Report spam
Hallo,

weiß jemand, ob es eine bessere Möglichkeit gibt char- und
byte-Konstanten wie unten in

struct AsciiByteOK und
struct AsciiCharOK anzulegen?

Die Verwendung sollte so einfach wie möglich, also ohne type cast sein.
Siehe Kommentar (// ideal) im Code unten.
Bei 2 x 32 Konstanten sieht die Konstruktion mit struct recht aufwendig
aus. Denke es geht wohl einfacher, aber wie? Mit enum geht es leider nicht.

Danke!

Gruß, Rudi


enum AsciiByte : byte
{
NUL = 0x00,
SOH = 0x01,
//..
}

enum AsciiChar
{
NUL = '\x00',
SOH = '\x01',
//..
}

struct AsciiByteOK
{
public const int NUL = 0x00;
public const int SOH = 0x01;
//..
public const int US = 0x1F; // 31
public const int SPC = 0x20; // 32
}

struct AsciiCharOK
{
public const char NUL = '\x00';
public const char SOH = '\x01';
//..
public const char US = '\x1F'; // 31
public const char SPC = '\x20'; // 32
}

class Program
{
static void Main(string[] args)
{
byte b;
char c;
//b = AsciiByte.SOH; // fail
b = (byte)AsciiByte.SOH;
b = AsciiByteOK.SOH; // ideal

//c = AsciiChar.SOH; // fail
c = (char)AsciiChar.SOH;
c = AsciiCharOK.SOH; // ideal

Console.WriteLine(AsciiByte.SOH); // "SOH" bad
Console.WriteLine((byte)AsciiByte.SOH); // "1" OK
Console.WriteLine(AsciiByteOK.SOH); // "1" ideal
Console.WriteLine(AsciiCharOK.SOH); // "(smile)" ideal
Console.ReadLine();
}
}
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
12/12/2007 - 12:23 | Warnen spam
"Rudi" schrieb:
weiß jemand, ob es eine bessere Möglichkeit gibt char- und byte-Konstanten
wie unten in

struct AsciiByteOK und
struct AsciiCharOK anzulegen?



Es muß nicht notwendigerweise eine Struktur sein. Du kannst stattdessen auch
eine Klasse benutzen und die einzelnen Konstanten als Konstanten oder als
öffentliche 'readonly'-Felder mit dem Typ 'byte' oder 'char' implementieren.
Das wird auch bei den "Konstanten" in 'System.IO.Path' so gelöst.

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen