Maar dan krijg ik deze error, is opzich wel logisch omdat attachments een object is. Kan ik dit stukje ombouwen dat het met een object overweg kan?
Dit is de error die ik krijg:
Citaat:
Error 1 Cannot convert type 'Outlook2007Project.Attachment' to 'System.Collections.Generic.KeyValuePair<int,string>' Outlook Project Backup.cs 86 21 Outlook Project Backup
Wat je wel kan doen is anders met een Dictionary werken, dit is niet zo heel verschillend en je kan er gemakkelijk de KeyValuePair op toepassen. Je geeft tussen de haakjes de Key en de Value al mee, de Value is in jouw geval van het type 'Attachment. Klein voorbeeldje:
//Nieuwe Dictionary, Key is int en Value is Mail
Dictionary<int, Mail> lstMail = new Dictionary<int, Mail>();
//Nieuw Mail-object
Mail m;
private void Form1_Load(object sender, EventArgs e)
{
//Aan de lijst een Key toevoegen en dan telkens een nieuwe Mail
lstMail.Add(1, new Mail(1, "test", "sadfasd", true, "blaat"));
lstMail.Add(2, new Mail(6, "asdf", "asfdasd", false, String.Empty));
lstMail.Add(3, new Mail(3, "jhgk", "lhjkllk", false, String.Empty));
lstMail.Add(4, new Mail(9, "eyty", "swerttr", true, "blaat"));
lstMail.Add(5, new Mail(8, "zxvc", "zcvxzcv", true, "blaat"));
lstMail.Add(6, new Mail(2, "erbh", "vwevwff", false, String.Empty));
}
private void button1_Click(object sender, EventArgs e)
{
//Loopen door de lijst
foreach (KeyValuePair<int, Mail> mail in lstMail)
//De Key weergeven en van de Value (Mail) alleen het Subject
MessageBox.Show("Key: " + mail.Key + ", Value: " + mail.Value.Subject);
}
Ah, dat is ook wel een oplossing. Maandag even uitproberen .
Nog even een vraagje, kan het ook zonderdat ik de key toevoeg? Dus dat die automatisch optelt zoals in php? Want anders moet ik alsnog een var maken die ik binnen de foreach (waar ik de nieuwe Dictionary maak) gebruik en steeds optel.
En als ik wil kijken of de key/value al bestaat, hoe doe ik dat dan? Want hier haal ik alle projectnummers op en wil ik kijken of ze al in de Dictionary staan. Maar krijg dus een fout waar ik ContainsValue() (regel 13) gebruik omdat de value een Projectnumbers object is maar ik dat ga vergelijken met een string. Hoe los ik dit op?
Je ziet het eerst declareren van variabelen hier als nadeel, maar dit is juist een voordeel tov PHP. Op deze manier krijg je geen onverwacht gedrag van je applicatie maar bepaal je van te voren welk datatype en waarde een variabele moet hebben.
Over je andere vraag: een Dictionary wordt gebruikt om aan de hand van een key een bepaalde waarde op te zoeken. Wanneer je dan ook iets wil toevoegen dan controleer je of de key al voorkomt in de Dictionary (met behulp van .ContainsKey()). Wanneer dit niet zo is dan voeg je hem toe. Je controleert dus niet op de Value zoals jij nu doet. Tenminste, dit is niet de toepassing waarvoor een Dictionary gemaakt is. Je gaat ook geen Engels - Nederlands woordenboek kopen omdat je een woord van het Nederlands naar het Engels wilt vertalen...
Om vervolgens door je Dictionary heen te loopen en de keys te verkrijgen die je toegevoegd hebt, kun je de volgende code gebruiken: