我怎么能转换任意字符串符合CLS的名字呢?
-
26-09-2019 - |
题
的算法(或外部库)的有谁知道,我可以打电话转换任意字符串(即我的控制之外)是符合CLS?
我生成用于一个ASP.Net报告查看器控制和一些字段名需要的是基于由用户输入的字符串动态RDLC(客户端报告定义)。
不幸的是我没有对客户端的字段名的条目(通过第三方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
解决方案
下面是我用来创建从任意字符串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);
}
在前导下划线是不必要的,如果正则表达式的结果的第一个字符不是数字。
其他提示
下面是我发现可能是分裂符合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
}
}
不隶属于 StackOverflow