c#或vb的测试字符串
本文关键字:测试 字符串 vb | 更新日期: 2023-09-27 18:12:48
判断字符串是否代表VB的半可靠方法是什么?. NET还是c#代码?它并不是在所有情况下都有效,所以一个算法在50%以上的时间里是正确的,总比什么都没有好。
我写了下面的代码,但是它太原始了。
public static ExpressionLanguage TryDetermineLanguage(string text)
{
int csCount = 0;
int vbCount = 1;
csCount += text.Count(';');
csCount += text.Count("//");
csCount += text.Count("/*");
csCount += text.Count("{");
csCount += text.Count("}");
vbCount += text.Count("If");
vbCount += text.Count("Then");
vbCount += text.Count("Else");
vbCount += text.Count("End");
vbCount += text.Count("Return");
if (vbCount > csCount)
return ExpressionLanguage.VisualBasic;
if (csCount > vbCount)
return ExpressionLanguage.CSharp;
return ExpressionLanguage.Unknown;
}
我已经在我的项目中访问了Roslyn,但我希望它能够在不经过完整的解析和编译周期的情况下工作。
这完全取决于您希望它工作得多好。一个非常简单的方法是计算字符{
和}
的出现次数,并将其与单词"End"
的出现次数进行比较。最有可能的是,如果{
和}
比End
多,那么它就是c#。
一种更可靠的方法是检查大量的c#和VB代码来构建和存储每种语言的三元模型,这需要更多的工作。然后,给定一段特定的代码,构建该代码中三元组的直方图,并将其与存储的模型进行比较。
这两种技术都可能在存在大引号字符串和注释的情况下失效,除非您的程序具有识别和丢弃引号字符串和注释中的文本的智能。但是,如果您不担心这些边缘情况,我怀疑上面的第一种技术在大多数情况下会做得很好。
最好的方法取决于几个因素。
- 字符串是 vb还是c#,还是两者都不是?
- 字符串是一个功能代码块,还是只是一个随机的文本块?
- 如果是一个功能代码块,最小大小是多少(单个语句或表达式,或方法,方法签名,整个类)
但是一个快速而肮脏的"just try this"方法可能只是在带引号的字符串之外寻找分号或{或}。