Laden...

Einfache Methode um String zu kürzen?

Erstellt von Golo Roden vor 15 Jahren Letzter Beitrag vor 15 Jahren 4.895 Views
Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren
Einfache Methode um String zu kürzen?

Hallo,

gibt es eine => einfache ≤ Methode, einen String zu kürzen, falls er zu lang ist?

Substring hat das Problem, dass eine Exception geworfen wird, falls der String zu kurz ist.

Ein if oder Math.Min würde ich gerne vermeiden - gibt's hier was einfacheres?

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

G
497 Beiträge seit 2006
vor 15 Jahren

string x = "Blubbblablum";
x = x.Length > 5 ? x.Substring(0,5) : x;

dieser Code kürzt den String "x" auf 5 Zeichen, beginnend beim ersten Zeichen.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren

Okay, das wäre die Kompaktversion von der Variante mit if ... ich denke mal, ohne so was in der Art kommt man nicht aus, oder?

Aber die Idee ist nicht dumm, danke 🙂

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

G
497 Beiträge seit 2006
vor 15 Jahren

was anderes fiele mir jetzt nicht ein. Alternativ könnte man eine Substring-Extension schreiben, die keine Ausnahme schmeisst.

F
101 Beiträge seit 2007
vor 15 Jahren

kla gehts 😄^^

string str = "blablablablabla";

char[] source = str.ToCharArray();
char[] dest = new char[5];
Array.Copy(source, dest, 5);

string newStr = new string(dest);

Console.WriteLine(newStr);

//glaube aber kaum das man sowas benutzen sollte

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren

*g* ... na ja, wie gesagt, ich fragte ja nach => einfach ≤ ^^

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

U
1.688 Beiträge seit 2007
vor 15 Jahren

Hallo,

Du könntest
Microsoft.VisualBasic.Strings.Left
benutzen. Funktioniert natürlich auch in C# problemlos.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren

Hmmmm, auch eine Idee 🙂

Danke!

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Golo Roden,

ziemlich klarer Fall für eine Extension Method für String, die genau macht, was du willst.

herbivore

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren

Leider muss es .NET 2.0 sein ... ansonsten wäre das sicher die beste Lösung.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

5.941 Beiträge seit 2005
vor 15 Jahren

Hoi Golo

Wieso und wozu überhaupt wenn ich fragen darf?
Muss das im Bezug auf die Codegrösse / Komplexität oder der Laufzeit "klein" sein?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Golo Roden,

unter .NET 2.0 könntest du einen statische Klasse StringEx mit der entsprechenden Methode machen. Die Aufruf-Syntax ist dann nicht so schön, wie bei Extension Methods. Aber inhaltlich läuft es auf das gleiche hinaus.

herbivore

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren

Wieso und wozu überhaupt wenn ich fragen darf?
Muss das im Bezug auf die Codegrösse / Komplexität oder der Laufzeit "klein" sein?

Nur auf die Codegröße ... und es ist auch mehr eine "akademische" Frage, wir kamen da gestern im Kollegenkreis drauf ... steckt kein wirklich praktisches Problem dahinter ...

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

795 Beiträge seit 2006
vor 15 Jahren

Hi, Golo.

unter .NET 2.0 könntest du einen statische Klasse StringEx mit der entsprechenden Methode machen. Die Aufruf-Syntax ist dann nicht so schön, wie bei Extension Methods. Aber inhaltlich läuft es auf das gleiche hinaus.

Unter .Net 2.0 funktionieren Extension Methods mit einem kleinen Trick auch (VS 2008 vorausgesetzt):

Einfach folgenden Code ins Projekt hinzufügen.

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
  public class ExtensionAttribute : Attribute
  {
  }
}

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
1.134 Beiträge seit 2004
vor 15 Jahren

AFAIK gabs auch compile tools für .NET 2.0 welche die Extension methods generieren.

Letztendlich ists ja nichts anderes als ein paar CompileFunktionen die einen weiteren aufruf in den IL code generieren.
Vom IL Code an sich gibt es praktisch keinen unterschied ob die methode direkt oder via ext. Method aufgerufen wurde.

Hab leider keinen link mehr parat

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren
namespace System.Runtime.CompilerServices  
{  
  [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]  
  public class ExtensionAttribute : Attribute  
  {  
  }  
}  

Und was genau hat das mit Extension Methods zu tun?

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

1.134 Beiträge seit 2004
vor 15 Jahren

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)

G
497 Beiträge seit 2006
vor 15 Jahren

anscheinend funktioniert das wirklich so: http://www.danielmoth.com/Blog/2007/05/using-extension-methods-in-fx-20.html

Die Extensions sind ja eigentlich kein .Net-Feature, sondern nur eine Compiler-Spielerei.

1.134 Beiträge seit 2004
vor 15 Jahren

sag ich doch 😉

Gleiches gilt auf für einige der anderen neuen features wie die autoproperties etc...

Irgendwo gabs dazu sehr gute Übersichten was was im ILCode verursacht.

Was in dem Zusammenhang auch noch interessant sien köntne ist die "LinkBridge"

http://www.albahari.com/nutshell/linqbridge.html

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)