Frage

Wer weiß, einen Algorithmus (oder externer Bibliothek), dass ich nennen könnte eine beliebige Zeichenfolge (das heißt außerhalb meiner Kontrolle) zu konvertieren CLS kompatibel zu sein?

Ich erzeuge einen dynamischen RDLC (Client Report Definition) für eine ASP.Net Report Viewer-Steuerung und einige der Feldnamen müssen auf Strings durch den Benutzer eingegeben werden, berechnet.

Leider habe ich wenig Kontrolle über die Eingabe der Feldnamen durch den Kunden (durch eine 3rd-Party-CMS). Aber ich bin sehr flexibel um Ersetzungen erforderlich, um den konformen String zu erstellen.

Ich habe einen reaktiven Hack Algorithmus für die jetzt entlang der Linien von:

public static string FormatForDynamicRdlc(this string s)
{
    //We need to change this string to be CLS compliant.
    return s.Replace(Environment.NewLine, string.Empty)
        .Replace("\t", string.Empty)
        .Replace(",", string.Empty)
        .Replace("-", "_")
        .Replace(" ", "_");
}

Aber ich würde etwas umfassenderes lieben. Irgendwelche Ideen?

Hinweis: Wenn es keine Hilfe ist, geht der Algorithmus ich die dynamische RDLC erstellen bin mit basiert auf dem BuildRDLC Methode finden Sie hier: http://csharpshooter.blogspot.com/2007/08/revised-dynamic-rdlc-generation.html

War es hilfreich?

Lösung

Hier ist der Algorithmus verwende ich C / C ++ Bezeichner von beliebigen Zeichenkette (übersetzt in C #) zu erstellen:

    static void Main(string[] args)
    {
        string input = "9\ttotally no @ # way!!!!";
        string safe = string.Concat("_", Regex.Replace(input, "[^a-z0-9_]+", "_"));
        Console.WriteLine(safe);
    }

Der führende Unterstrich ist nicht erforderlich, wenn das erste Zeichen des regex Ergebnisses nicht numerisch ist.

Andere Tipps

Hier ist ein regulärer Ausdruck, den ich gefunden für das Aufspalten CLS-kompatiblen Strangteil nützlich sein könnte und nicht CLS-kompatiblen Strangteil. Unterhalb Implementierung in C #:

string strRegex = @"^(?<nonCLSCompliantPart>[^A-Za-z]*)(?<CLSCompliantPart>.*)";
Regex myRegex = new Regex(strRegex, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
string strTargetString = @"                            _aaaaaa[5]RoundingHeader";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top