2012-08-15 106 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

相關問題