在 C# 中添加和删除列表中的项目失败

用户8174757

我有几个动态文本框,每当文本框失去焦点时,我想将其文本值添加到列表中,并在文本框被清除时删除

<TextBox LostFocus="comment_box_LostFocus" Name="comment_box" Tag="{x:Bind id}" Width="300"/>

现在在 c# 代码上

List<CommentModel> commentlist = new List<CommentModel>();

private void comment_box_LostFocus(object sender, RoutedEventArgs e)
{
    var comenttext = ((TextBox)sender).Text; //this is okay
    var commentid = ((TextBox)sender).Tag; //this is okay

    if (String.IsNullOrEmpty(comenttext)) //incase user clears the textbox
    {
        for(var i=0; i< commentlist.Count; i++)
        {
            if(commentlist[i].id == (int)commentid)
            {
                var itemToRemove = commentlist.Single(r => r.id == (int)commentid);
                commentlist.Remove(itemToRemove);
            }
        }
    }
    else //add new or update incase its a comment change
    {  
        for (var i = 0; i < commentlist.Count; i++)
        {
            if ((commentlist[i].id) == ((int)commentid))
            {
                commentlist[i].comment = comenttext;
            }
            else
            {
                 commentlist.Add(new CommentModel((int)commentid, (string)comenttext));
            }
        }
        }

            if (commentlist.Count == 0)
            {
                Debug.WriteLine("Comment list is empty adding initial comment");
                if (!String.IsNullOrEmpty(comenttext))
                {
                    //automatically add new
                    commentlist.Add(new CommentModel((int)commentid, (string)comenttext));
                }
            }
    }
}

类 CommentModel 是

class CommentModel
{
    public int id;
    public string comment;

    public CommentModel(int idval, string commentval)
    {
        this.id = idval;
        this.comment = commentval;
    }
}

每当我尝试

for(var i=0; i< commentlist.Count; i++)
{
    Debug.WriteLine(commentlist[i].comment);
}

这是注释的双重重复

first entry: "test one", debug output "test one", 
second entry :"no2", debug output :"test one", "no2"....

我哪里会出错?

保尔夫

您需要将代码更改为如下所示:

if (String.IsNullOrEmpty(comenttext)) //incase user clears the textbox
{
    for (var i = 0; i < commentlist.Count; i++)
    {
        if (commentlist[i].id == (int)commentid)
        {
            var itemToRemove = commentlist.Single(r => r.id == (int)commentid);
            commentlist.Remove(itemToRemove);
            break;
        }
    }
}
else
{
    bool found = false;
    for (var i = 0; i < commentlist.Count; i++)
    {
        if ((commentlist[i].id) == ((int)commentid))
        {
            commentlist[i].comment = comenttext;
            found = true;
            break;
        }
    }
    if (! found)
        commentlist.Add(new CommentModel((int)commentid, (string)comenttext));
}

在您的原始代码中,您遍历列表中的每个元素,如果 id 匹配,则更新注释,如果不匹配,则始终添加另一个条目 - 因此最终会得到多个重复条目。

您需要搜索列表并仅在未找到条目时添加,如果找到 id,则您可以停止搜索列表。

同样,您可以在 if 子句中找到条目后退出循环,但在这种情况下,您只会浪费时间,因为您已经删除了 id 的条目

没有 for 循环的更短的 LINQ 解决方案可能是:

var itemInList = commentlist.Where(li => li.id == (int)commentid).FirstOrDefault();
if (String.IsNullOrEmpty(comenttext)) //incase user clears the textbox
{
  if (itemInList != null)
    commentlist.Remove(itemInList);
}
else //add new or update incase its a comment change
{
  if (itemInList != null)
    itemInList.comment = comenttext;
  else
    commentlist.Add(new CommentModel((int)commentid, comenttext));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从C ++列表中删除项目

来自分类Dev

如何在链接列表c中添加和打印项目

来自分类Dev

如何在C#中从列表框和对象列表中删除项目

来自分类Dev

从列表C#中删除随机项目

来自分类Dev

从列表C#中删除随机项目

来自分类Dev

C# 从 XML 列表中删除项目

来自分类Dev

如何从c#中的字典列表中删除项目?

来自分类Dev

如何在C#中添加,更新,保存和删除键列表<KeyValuePair <int,string >>

来自分类Dev

QCheckbox从列表中添加和删除项目

来自分类Dev

在C#Winform中删除列表框项目

来自分类Dev

如何删除列表框c#中的项目

来自分类Dev

从C中的列表中删除

来自分类Dev

在数组C#中添加和更改项目

来自分类Dev

在C#多维列表中对行进行排序和删除

来自分类Dev

在C#多维列表中对行进行排序和删除

来自分类Dev

从C ++列表中删除对象

来自分类Dev

从列表C ++中删除对象

来自分类Dev

从列表C中删除元素

来自分类Dev

在C中删除链接列表

来自分类Dev

C#从列表视图外部的控件中删除列表视图中的项目

来自分类Dev

从 C# 中的 ListView 中删除项目

来自分类Dev

无法在 C++ 中删除头节点并从列表中返回项目

来自分类Dev

将项目添加到列表对象 c# 中的属性(列表对象类型)

来自分类Dev

如何使用Knockout JS在列表中添加和删除项目?

来自分类Dev

如何使用Knockout JS在列表中添加和删除项目?

来自分类Dev

如何从数组列表对象中添加和删除项目

来自分类Dev

如何删除C ++中添加到链接列表中的最后一个元素

来自分类Dev

C ++中的指针和删除

来自分类Dev

c#从列表中删除项目,但不知道索引号