Kein Duplikat von this.Cap-String auf eine bestimmte Länge direkt ohne Funktion
Ich möchte eine Zeichenfolge eine maximale Länge haben. Es sollte niemals diese Länge überschreiten. Sagen wir eine 20 char Länge. Wenn die angegebene Zeichenfolge> 20 ist, nehmen Sie die ersten 20 Zeichen und verwerfen Sie den Rest.
The Antworten auf diese Frage zeigt, wie eine Zeichenfolge mit einer Funktion zu begrenzen, aber ich möchte es direkt ohne eine Funktion tun. Ich möchte die Überprüfung der Zeichenfolge Länge jedes Mal, wenn die Zeichenfolge geschrieben wird.
Unten ist das, was ich tun, um nicht wollen:
string myString = "my long string";
myString = capString(myString, 20); //<-- Don't want to call a function each time
string capString(string strToCap, int strLen)
{
...
}
Ich konnte dies mit einer Eigenschaft erreichen:
const int Max_Length = 20;
private string _userName;
public string userName
{
get { return _userName; }
set
{
_userName = string.IsNullOrEmpty(value) ? "" : value.Substring(0, Max_Length);
}
}
Dann kann ich es leicht whout Aufruf ein verwenden Funktion, um es zu verschließen:
userName = "Programmer";
Das Problem mit diesem ist, dass jede string
ich möchte, haben mehrere Variablen für sie zu begrenzen. In diesem Fall sind die _userName
und die userName
(Eigenschaft) Variablen.
Jede clevere Möglichkeit, dies zu tun, ohne mehrere Variablen für jede Zeichenfolge und gleichzeitig zu erstellen, muss nicht jedes Mal eine Funktion aufrufen, die ich string
ändern möchte?
Neben den Antworten unten können Sie ein AOP-Framework wie PostSharp verwenden, um ein Attribut zu definieren, das Ihre Property Setter abfängt. PostSharp hat eine kostenlose/Express Edition. –
Danke für den Vorschlag. Ich verwende Unity3D und Mono und versuche, die Verwendung von Drittanbieterbibliotheken zu verhindern, die die Binärgröße erhöhen oder Probleme auf mobilen Geräten verursachen. – Programmer
Keine Ahnung, ob es funktioniert oder nicht, aber respektiert Unity das ['StringLengthAttribute'] (https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattrute (v = vs.110).aspx) in .NET integriert? –