1

任意の文字列 (つまり、私の制御外) を CLS 準拠に変換するために呼び出すことができるアルゴリズム (または外部ライブラリ) を知っている人はいますか?

ASP.Net Report Viewer コントロールの動的 RDLC (Client Report Definition) を生成しています。一部のフィールド名は、ユーザーが入力した文字列に基づく必要があります。

残念ながら、(サードパーティの CMS を介して) クライアントによるフィールド名の入力をほとんど制御できません。しかし、準拠した文字列を作成するために必要な置換については、非常に柔軟です。

今のところ、次のようなリアクティブ ハック アルゴリズムがあります。

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(" ", "_");
}

しかし、私はもっと包括的なものを望んでいます。何か案は?

注: 参考になれば、動的 RDLC の作成に使用しているアルゴリズムは、http://csharpshooter.blogspot.com/2007/08/revised-dynamic-rdlc-generation にある BuildRDLC メソッドに基づいています。 html

4

2 に答える 2

4

これが、任意の文字列(C#に変換)からC /C++識別子を作成するために使用するアルゴリズムです。

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

正規表現の結果の最初の文字が数字でない場合、先頭の下線は不要です。

于 2010-06-09T23:29:27.607 に答える
0

これは、CLS 準拠の文字列部分と非 CLS 準拠の文字列部分を分割するのに役立つ正規表現です。以下の 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
  }
}
于 2016-11-29T12:24:47.787 に答える