1

この質問に関連: Linq を使用して辞書から特定のキーを除外し、新しい辞書を返す

辞書を使用するオートコンプリートのコントロールを取得しました。シナリオでは、(コード エディターとして機能する) RichTextBox 内のすべての単語が、オートコンプリートのリストに自動的に追加されます。RichTextBox に「asdasdasd」という単語を入力すると、オートコンプリートに「asdasdasd」という単語が自動的に追加されます。

このコードを使用して:

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" という単語が含まれるようになりました。また、フォームが読み込まれると、常にそこにある必要がある特定のデフォルト スクリプトが表示されます。だから変えられない。

これを修正するために私がしなければならない2つの可能な解決策: 1. フォームの読み込み時に、デフォルトのスクリプトで使用されるデフォルトの単語をオートコンプリートに追加できないようにします (リストに追加できない単語のリストを作成します) 2. 次の行を検出します「//」または「/*」にコメントを付けて、そこからの単語が辞書に追加されないようにしました。

あなたが私を助けてくれることを願っています。質問を修正する必要があるかどうか教えてください。できるだけ早く修正/更新します。

メイン_Q:

リッチテキストボックス (// または /* で始まる行) からコメント付きの単語をオートコンプリートに追加しないようにする方法

4

3 に答える 3

0

これがあなたが望むものだと思います:

var filter = Regex.Matches(rtb_JS.Text, @"\b\w+\b")
                  .OfType<Match>()
                  .Where(m=>!keysToBeFiltered.Any(x=>x == m.Value))
                  .ToDictionary(m=>m.Value,m=>m.Value);

エントリにとが同じ値をDictionary持っているのは奇妙ですか?KeyValue

于 2013-08-14T09:22:52.197 に答える