| 

.NET C# Java Javascript Exception

1
Also ein String soll beispielsweise nur 20 Zeichen fassen können. Weist man einen längeren String zu, werden nur die ersten 20 Zeichen übernommen. Der Rest wird verworfen.
Klar, sowas ist ein Array of String
string[20] c = "";

aber so, wie das früher in Pascal möglich war, gibt es nichts?
Oder vielleicht:
char[20] c = "";

Letzteres dürfte aber auch nicht gehen.
17.05.2011
KnoffHoff 11 1 1 2
KnoffHoff 11 1 1 2
3 Antworten
4
@knoffhoff: falsche schlussfolgerung.

wenn du keine berührungsängste mit der Microsoft.VisualBasic.Compatibility bibliothek hast:

FixedLengthString s = new FixedLengthString(13);
s.Value = "12345678901234567890";

=> ergebnis: du kannst maximal 13 stellen zuweisen .....


deine als pascal methode ... naja, nicht ganz.

char[] c13 = new char[14];
c13 = "12345678901234567890".ToCharArray();

wenn du das ausprobierst, wirst du feststellen, dass das array 20 elemente beinhaltet. du kannst das allerdings so machen:

char[] c13 = new char[14];
c13 = "12345678901234567890".ToCharArray(0,13);

dann hat dein array nur 13 elemente mit index 0 bis 12.
17.05.2011
nabuchodonossor 1,3k 5
3
Auf die schnelle mal einen kleinen Helper für dich, zur Anregung ;)

public string HasStringClaimedLength(string value, int claimedLength)
{
return (value.Length <= claimedLength) ? value : value.Substring(0, claimedLength);
}

Aufruf:
Console.WriteLine(HasStringClaimedLength("Hier ein String der nur 10 Zeichen haben darf", 10));

Ausgabe:
Hier ein S


Als ExtensionMethod so:

public static class Extensions
{
public static string HasStringClaimedLength(this string value, int claimedLength)
{
return (value.Length <= claimedLength) ? value : value.Substring(0, claimedLength);
}
}

Aufruf:
Console.WriteLine("Hier ein String der nur 20 Zeichen haben darf".HasStringClaimedLength(20));
17.05.2011
Mario Priebe 6,0k 3 9
Vielen Dank. Ich schließe aus deiner Antwort, dass es keine in C# eingebaute Möglichkeit gibt, die Länge des Strings zu begrenzen.
KnoffHoff 17.05.2011
Wüsste ich jetzt nicht.
Mario Priebe 17.05.2011
3
und weil mir heute fad war hier als fix und fertige klasse:

public class FixedString
{
private string _internalString = "";
private int _maxSize = 65536;

public FixedString()
{
}

public FixedString(int maxSize)
{
_maxSize = maxSize;
}

public string FString
{
get { return _internalString; }
set
{
if (value.Length <= _maxSize)
{
_internalString = value;
}
else
{
_internalString = value.Substring(0, _maxSize);
}
}
}

public int FStringMaxSize
{
get { return _maxSize; }
set
{
if (value > 0)
{
_maxSize = value;
}
else
{
throw new ArgumentOutOfRangeException("FixedString Length may not be zero!");
}
}
}

public override string ToString()
{
return _internalString;
}

public string ToStringPadLeft()
{
return _internalString.PadLeft(_maxSize);
}

public string ToStringPadLeft(char c)
{
return _internalString.PadLeft(_maxSize, c);
}

public string ToStringPadRight()
{
return _internalString.PadRight(_maxSize);
}

public string ToStringPadRight(char c)
{
return _internalString.PadRight(_maxSize, c);
}
}


// EDIT
Kleine Schönheits- und String-Korrektur
17.05.2011
nabuchodonossor 1,3k 5
1
Wau. Danke.
KnoffHoff 17.05.2011
@Klein: ich seh die Änderung nicht?
nabuchodonossor 18.05.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH