2012-08-15 92 views
0

我的目标是检查一个字符串是否包含列表中的任何字符串值,并存储该值并将其包装在HTML标签中。我有点迷失在这里。检查字符串是否包含列表中的元素并存储它

我的列表:

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

比方说,我是sendind文本protected void TagListView_ItemDataBound(object sender, ListViewItemEventArgs e)下面的代码,我要的是得到:

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

的价值观在一个单独的方法就将此关键字protectedvoid分配为matchedItems以包装在我的HTML标签中。感觉就像查找方法应该检查项目是否被找到,而不是整个列表,但我在这里有点失落。这是我走到这一步:

 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。它似乎比我迄今为止所提出的更简单。

+0

有一个包含方法? – 2012-08-15 06:06:57

+0

@WaqarJanjua这就是我感到困惑的事情,对列表搜索方法不太熟悉。我想搜索正在迭代的项目的文本框,但不知道如何。 – oskarno 2012-08-15 06:25:07

回答

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

我意识到这一点,只是尝试一些突出的东西,毕竟这是很好的名单上练习。但是我想要做的,存储匹配的项目应该很简单,我做的都是错误的,只是无法弄清楚。 – oskarno 2012-08-15 06:19:26

+0

@oskarno:看看我的编辑,但从长远来看,这确实不会令人满意。 – 2012-08-15 06:24:11

+0

啊,这更容易理解,刚刚摆脱UsedItems列表,如你所说,并使用修饰符变量作为matchedItem。但是,是的,我了解你对荧光笔的评价,我不会因此而破坏我的手指......谢谢。 – oskarno 2012-08-15 06:42:06

相关问题