列表中的错误删除

时间:2016-05-12 08:57:08

标签: c# list oop linked-list binaryfiles

我创建了一个列表和一个二进制文件来存储数据。现在我尝试从列表中删除但它不起作用,为什么?

错误显示:

  

错误2:参数1:无法从'XYZ_System.Log'转换为'System.Predicate'E:\ Degree Assignment \ Application development-semester 1 \ XYZ_System \ XYZ_System \ RegisterUser.cs 239 32 XYZ_System

     

Error1:'System.Collections.Generic.List.RemoveAll(System.Predicate)'的最佳重载方法匹配有一些无效的参数E:\ Degree Assignment \ Application development-semester 1 \ XYZ_System \ XYZ_System \ RegisterUser.cs 239 17 XYZ_System

    private void btnDelete_Click(object sender, EventArgs e)
    {
        try
        {
            Log lg = new Log();
           // lg.Username = this.textBox1.Text;
            //lg.Password = this.textBox2.Text;
           // lg.Name = this.txtname.Text;
           // lg.Contact = Convert.ToInt32(this.txtContact_no.Text); ;
           // lg.Email = this.txtEmail_Address.Text;

            Stream stream = File.Open("Login.bin", FileMode.Open);
            BinaryFormatter bformatter = new BinaryFormatter();
            list = (List<Log>)bformatter.Deserialize(stream);
            stream.Close();

            list.RemoveAll(lg);

           // dtvregister.DataSource = list;

            {
                MessageBox.Show("Selected details has been deleted !", "Success");
                Reset();
            }

        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

1 个答案:

答案 0 :(得分:2)

list.RemoveAll()需要一个函数(Predicate<T>),如果要删除该项,则返回一个将按项目调用的布尔值。 这是一个明确的例子:

private bool ValidateItem(Log lg)
{
    if(lg.Name == "John")
        return true;
    else
        return false;
}

list.RemoveAll(ValidateItem);

但是对于lambda表达式,它的作用相同:list.RemoveAll(lg => lg.Name == "John");

在您的情况下,可以使用此list.RemoveAll(lg => true);,但您最好使用 list.Clear();