0

私の目標は、文字列にリストの文字列値が含まれているかどうかを確認し、その値を格納してHTMLタグでラップすることです。私はここでちょっと迷っています。

私のリスト:

public List<string> AccessModifiers
{
    get { return _accessModifiers ?? (_accessModifiers = new List<string>()); }
}

別の方法で値を追加すると、次のようになります。

AccessModifiers.Add("public");
AccessModifiers.Add("private");
AccessModifiers.Add("protected");
AccessModifiers.Add("internal");
AccessModifiers.Add("protected internal");
AccessModifiers.Add("void");

以下のコードにテキストprotected void TagListView_ItemDataBound(object sender, ListViewItemEventArgs e)を送信したとしましょう。必要なのは、キーワードを取得し、protectedmatchedItemsとしてvoidHTMLタグでラップすることです。Findメソッドは、リスト全体ではなく、アイテムが見つかったかどうかをチェックする必要があるように感じますが、ここでは少し迷っています。これが私がこれまでに得たものです:

        foreach (var item in AccessModifiers)
        {
            if (UsedItems == null) // If the session is null...
            {
                UsedItems = new List<string>(); // ...a new one is initiated
            }

            if(!UsedItems.Contains(item)) // Check if the iterated item is found in the session-list
            {
                bool match = AccessModifiers.Any(ArticleTextBox.Text.Contains);
                string matchedItem = AccessModifiers.Find(ArticleTextBox.Text.Contains);

                if (match == true)
                {
                    string openTag = "<span class='accessModifiers'>";
                    string closeTag = "</span>";
                    string newModifier = openTag + matchedItem + closeTag;
                    newText = newText.Replace(matchedItem, newModifier);
                    UsedItems.Add(matchedItem);  // Add the matchedItem (used item) to the session-list not to be iterated again
                }
            }
        }
        return newText;

この時点では、protected保存するキーワードのみを取得できます。。は取得できませんvoid。私がこれまでに思いついたものよりも簡単なようです。

4

1 に答える 1

1

これまで考えてきたものよりも簡単なようです。

まったく逆です。特に、あなたが与えた例は単純ですが、一般的なケースはそうではありません:

public static void thisvoidmethodisstatic()
{
    Console.WriteLine("private within text");
}

基本的に、コードの構造をよりよく理解するコードが必要になります。単純な検索と置換ではうまくいきません。

私が csharpindepth.com で使用しているコード ハイライターは、Jared Parsons によって作成された VB ハイライターに基づいています。元のソースが見つかるかどうかを確認しますが、見つからない場合は、他のオープン ソース コード ハイライターが利用可能であると確信しています。

編集:単純な検索と置換を行うだけで本当に満足している場合は、必要以上に複雑になっていることは間違いありません。

  • すべてのアクセス修飾子を繰り返し処理し、ループ内でそれらすべて探しています
  • 条件付きリストの割り当てを取り除くことを強くお勧めします-常に空のリストを事前に割り当ててください。他のことは別として、他の場所で nullity をチェックする必要がなくなります。

次に、次のようになります。

foreach (var modifier in AccessModifiers)
{
    if (ArticleTextBox.Text.Contains(modifier))
    {
        UsedItems.Add(modifier);
        string openTag = "<span class='accessModifiers'>";
        string closeTag = "</span>";
        string newModifier = openTag + matchedItem + closeTag;
        newText = newText.Replace(matchedItem, newModifier);
    }
}
于 2012-08-15T06:07:49.217 に答える