Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查字符串是否包含列表中的元素并将其存储_C#_Asp.net_List - Fatal编程技术网

C# 检查字符串是否包含列表中的元素并将其存储

C# 检查字符串是否包含列表中的元素并将其存储,c#,asp.net,list,C#,Asp.net,List,我的目标是检查字符串是否包含列表中的任何字符串值,存储该值并将其包装在HTML标记中。我有点迷路了 我的名单: public List<string> AccessModifiers { get { return _accessModifiers ?? (_accessModifiers = new List<string>()); } } 假设我将文本protected void TagListView\u ItemDataBound(object sende

我的目标是检查字符串是否包含列表中的任何字符串值,存储该值并将其包装在HTML标记中。我有点迷路了

我的名单:

public List<string> AccessModifiers
{
    get { return _accessModifiers ?? (_accessModifiers = new List<string>()); }
}
假设我将文本
protected void TagListView\u ItemDataBound(object sender,ListViewItemEventArgs e)
发送到下面的代码中,我想要的是将关键字
protected
void
作为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;
foreach(AccessModifiers中的变量项)
{
if(UsedItems==null)//如果会话为null。。。
{
UsedItems=new List();/…启动一个新列表
}
if(!UsedItems.Contains(item))//检查在会话列表中是否找到迭代项
{
bool match=AccessModifiers.Any(ArticleTextBox.Text.Contains);
string matchedItem=AccessModifiers.Find(ArticleTextBox.Text.Contains);
如果(匹配==真)
{
字符串openTag=“”;
字符串closeTag=“”;
字符串newModifier=openTag+matchedItem+closeTag;
newText=newText.Replace(matchedItem,newModifier);
UsedItems.Add(matchedItem);//将matchedItem(已用项)添加到会话列表中,以便不再迭代
}
}
}
返回新文本;
此时,我只能存储关键字
protected
,而不能存储
void
。这似乎比我目前提出的要简单得多

这似乎比我目前提出的要简单得多

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

public static void thisvoidmethodisstatic()
{
    Console.WriteLine("private within text");
}
基本上,您将需要更好地理解代码结构的代码。简单的搜索和替换并不能解决这个问题

该软件基于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);
    }
}
foreach(AccessModifiers中的var修饰符)
{
if(ArticleTextBox.Text.Contains(修饰符))
{
UsedItems.Add(修饰符);
字符串openTag=“”;
字符串closeTag=“”;
字符串newModifier=openTag+matchedItem+closeTag;
newText=newText.Replace(matchedItem,newModifier);
}
}

我知道这一点,只是尝试一些突出显示的东西,毕竟在列表上练习是很好的。但是我想做的是,存储匹配项应该很简单,我做的都是错的,只是想不出来。@oskarno:看我的编辑,但从长远来看,这真的不是很令人满意。啊,这更容易理解,就像你说的,只是去掉了UsedItems列表,并使用修饰符变量作为matchedItem。但是是的,我理解你对荧光灯的看法,我不会为此而打断我的手指。。。谢谢。@WaqarJanjua这正是我所困惑的,我不太熟悉列表搜索方法。我想在文本框中搜索正在迭代的项,但不知道如何搜索。
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);
    }
}