不要将重复的对象添加到List中

Chr*_*ind -2 c#

我似乎找不到一种方法不将对象添加到我的列表中是相同的,我试过.包含但我只是没有让它工作,任何其他解决方法?我相信我必须使用if语句,并在else中创建对象,但我如何在if语句中做?

public Form1()
    {
        InitializeComponent();
    }
    private const string filnamn = "kontakter.bin";
    Kontakter kontakt;
    private List<Kontakter> kontakter;


    private void buttonLagra_Click(object sender, EventArgs e)
    {
            Kontakter nyKontakt = new Kontakter();
            {
                nyKontakt.Telefonnr = textBoxTelefonnr.Text;
                nyKontakt.Namn = textBoxNamn.Text;
            }

            kontakter.Add(nyKontakt);
            listBox1.DataSource = null;
            listBox1.DataSource = kontakter;
            BinaryFormatter bf = new BinaryFormatter();
            FileStream fs = new FileStream(filnamn, FileMode.OpenOrCreate, FileAccess.Write);
            bf.Serialize(fs, kontakter);
            fs.Close();
        }
Run Code Online (Sandbox Code Playgroud)

Cod*_*ter 5

List.Contains(o)检查对象o引用是否在列表中.事实并非像你刚才那样o = new {...}.

您想要检查列表中是否存在包含相同属性的对象:

if (!kontakter.Any(k => k.Telefonnr == textBoxTelefonnr.Text
                     && k.Namn == textBoxNamn.Text))
{
    kontakter.Add(new {...});
}
Run Code Online (Sandbox Code Playgroud)

你也可以让你的Kontakter工具IEquatable<Kontakter>,所以.Contains()做你期望的.请参阅.Contains实现的自定义类对象列表.

  • @AaronH Linq已经成为.NET的一部分七年了,所以除非另有说明,否则可以假设它存在.但是你可以随心所欲地向下投票.:) (4认同)
  • @AaronH:从那时起,这是一个向下投票的理由.OP没有说明他确实希望它与特定版本的.NET一起工作,所以每个人都可以自由回答. (3认同)