1

有谁知道我可以调用以将任意字符串(即在我的控制之外)转换为符合 CLS 的算法(或外部库)?

我正在为 ASP.Net 报表查看器控件生成动态 RDLC(客户端报表定义),并且某些字段名称需要基于用户输入的字符串。

不幸的是,我几乎无法控制客户端输入的字段名称(通过第 3 方 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 的算法基于此处的 BuildRDLC 方法:http://csharpshooter.blogspot.com/2007/08/revised-dynamic-rdlc-generation 。 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 回答