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,但我希望它能够在不经过完整的解析和编译周期的情况下工作。

c#或vb的测试字符串

这完全取决于您希望它工作得多好。一个非常简单的方法是计算字符{}的出现次数,并将其与单词"End"的出现次数进行比较。最有可能的是,如果{}End多,那么它就是c#。

一种更可靠的方法是检查大量的c#和VB代码来构建和存储每种语言的三元模型,这需要更多的工作。然后,给定一段特定的代码,构建该代码中三元组的直方图,并将其与存储的模型进行比较。

这两种技术都可能在存在大引号字符串和注释的情况下失效,除非您的程序具有识别和丢弃引号字符串和注释中的文本的智能。但是,如果您不担心这些边缘情况,我怀疑上面的第一种技术在大多数情况下会做得很好。

最好的方法取决于几个因素。

  1. 字符串 vb还是c#,还是两者都不是?
  2. 字符串是一个功能代码块,还是只是一个随机的文本块?
  3. 如果是一个功能代码块,最小大小是多少(单个语句或表达式,或方法,方法签名,整个类)

但是一个快速而肮脏的"just try this"方法可能只是在带引号的字符串之外寻找分号或{或}。