检查字符串是否包含列表中的元素并存储它

时间:2012-08-15 06:03:11

标签: c# asp.net list

我的目标是检查字符串是否包含列表中的任何字符串值,存储该值并将其包装在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)到下面的代码,我想要的是将关键字protectedvoid设为 matchedItems 来换行在我的HTML标签中。感觉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。看起来它比我到目前为止所做的更简单。

1 个答案:

答案 0 :(得分:1)

  

看起来它比我到目前为止所做的更简单。

恰恰相反。特别是,虽然您给出的示例很简单,但一般情况并非如此:

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

基本上你需要能够更好地理解代码结构的代码。简单的搜索和替换不会削减它。

code highlighter I use on csharpindepth.com基于Jared Parsons编写的VB荧光笔。我会看看是否可以找到原始来源 - 但如果没有,我相信还有其他开源代码荧光笔可用。

编辑:如果你真的只是做了一个天真的搜索和替换,那么你肯定会让它变得比你需要的更复杂。

  • 您正在遍历所有访问修饰符,而在循环中查找所有访问修饰符
  • 我强烈建议摆脱条件列表分配 - 只需事先分配一个空列表。除了其他任何东西,它避免你必须在其他地方检查无效。

然后你就得到了:

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);
    }
}