与此问题相关:Using Linq to filter out certain Keys from a Dictionary and return a new dictionary
我有一个使用字典的自动完成控件。场景是我的 RichTextBox(用作代码编辑器)中的每个单词都会自动添加到我的自动完成列表中。就像我在 RichTextBox 中键入单词“asdasdasd”一样,单词“asdasdasd”将自动添加到我的 auto-complete 中。
使用此代码:
private IEnumerable<AutocompleteItem> BuildList()
{
//find all words of the text
var words = new Dictionary<string, string>();
var keysToBeFiltered = new HashSet<string> { "Do", "Not" };
var filter = words.Where(p => !keysToBeFiltered.Contains(p.Key))
.ToDictionary(p => p.Key, p => p.Value);
foreach (Match m in Regex.Matches(rtb_JS.Text, @"\b\w+\b"))
filter[m.Value] = m.Value;
//foreach (Match m in Regex.Matches(rtb_JS.Text, @"^(\w+)([=<>!:]+)(\w+)$"))
//filter[m.Value] = m.Value;
foreach (var word in filter.Keys)
{
yield return new AutocompleteItem(word);
}
}
现在仍然包含“Do”和“Not”两个词以使用上面的代码自动完成。此外,当我的表单加载时,会出现一个特定的默认脚本,该脚本必须一直存在。所以我不能改变它。
我必须采取两种可能的解决方案来解决这个问题:1. 不允许在默认脚本中使用的那些默认单词在表单加载时添加到我的自动完成中。(制作阻止添加到我列表中的单词列表) 2. 检测行已评论“//”或“/*”并阻止其中的单词添加到我的字典中。
希望您能够帮助我。请告诉我是否需要修改我的问题,我会尽快修改/更新它。
主问:
如何防止将来自richtextbox(以//或/*开头的行)中的注释词添加到自动完成中