Feedback

C# - Erweiterung für Stringumwandlungen

Veröffentlicht von am 28.11.2008
(4 Bewertungen)
Diese Erweiterungsmethode ermöglicht die einfache Umwandlung eines Strings in Integer, Double und DateTime.

Aus den umzuwandelnden Strings werden die numerischen Anteile verwendet (siehe Beispiel, gilt nicht für DateTime).

Bei der Umwandlung eines Strings zu Double kann das Komma (,) oder der Punkt (.) als Dezimaltrennzeichen verwendet werden.

Beispiel:

string s1 = "abc1234def";
int? i1 = s1.Str2Int();

string s2 = "abc123,456def";
string s3 = "abc123.456def";
double? d2 = s2.Str2Double();
double? d3 = s3.Str2Double();

string s4 = "28.11.2008 15:07";
DateTime? dt4 = s4.Str2Date();
GFU-Schulungen  [Anzeige]

C# Grundlagen

Die Schulung vermittelt Ihnen die Grundlagen von C# in der Arbeit mit Datentypen sowie bei Klassenbibliotheken. Sie lernen, mit Variablen umzugehen und deren verschiedene Formen zu konvertieren. 

ASP.NET Core - Der Einstieg

In nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.

using System;
using System.Text.RegularExpressions;

namespace gfoidl.Tools
{
	public static class StringExtensions
	{
		// Für bessere Leistung werden die Regex hier erstellt:
		private static readonly Regex _regexInt = new Regex(@"\d+");
		private static readonly Regex _regexDouble = new Regex(
					@"\d+(" +
					System.Globalization.NumberFormatInfo
					.CurrentInfo.NumberDecimalSeparator +
					@")?(\d+)*");
		//---------------------------------------------------------------------
		/// <summary>
		/// Konvertiert eine Zeichenfolge in eine Ganzzahl
		/// </summary>
		/// <param name="s">
		/// Zu konvertierender String (zB "123456" oder "text123456BlaBlaBla")
		/// </param>
		/// <returns>
		/// Ganzahlrepräsentation der Zeichenfolge
		/// </returns>
		/// <remarks>
		/// Zum Finden der Zahl im Text werden reguläre Ausdrücke verwendet
		/// </remarks>
		public static int? Str2Int(this string s)
		{
			if (string.IsNullOrEmpty(s))
				return null;
			else
			{
				int i;
				if (int.TryParse(_regexInt.Match(s).Value, out i))
					return i;
				else
					return null;
			}
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Konvertiert eine Zeichenfolge in eine Dezimalzahl unabhängig
		/// vom Dezimaltrennzeichen
		/// </summary>
		/// <param name="s">
		/// Zu konvertierender String (zB "123.456" oder "123,456")
		/// </param>
		/// <returns>
		/// Dezimalrepräsentation der Zeichenfolge
		/// </returns>
		public static double? Str2Double(this string s)
		{
			if (string.IsNullOrEmpty(s))
				return null;
			else
			{
				double d;
				string tmp = s.Replace(
					".",
					System.Globalization.NumberFormatInfo
					.CurrentInfo.NumberDecimalSeparator);
				tmp = _regexDouble.Match(tmp).Value;

				if (double.TryParse(tmp, out d))
					return d;
				else
					return null;
			}
		}
		//---------------------------------------------------------------------
		public static DateTime? Str2Date(this string s)
		{
			if (string.IsNullOrEmpty(s))
				return null;
			else
			{
				DateTime d;
				if (DateTime.TryParse(s, out d))
					return d;
				else
					return null;
			}
		}
	}
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!