25. april 2008 - 20:58Der er
15 kommentarer og 1 løsning
DateTime listeToArray, problem med Items.AddRange
Når jeg i min windowsform kalder mit GetAllDatoSublist får jeg følgende fejl som jeg håber nogen kan hjælpe mig med at forstå?
Error 5 Argument '1': cannot convert from 'System.DateTime[]' to 'System.Windows.Forms.ListBox.ObjectCollection' Error 4 The best overloaded method match for 'System.Windows.Forms.ListBox.ObjectCollection.AddRange(System.Windows.Forms.ListBox.ObjectCollection)' has some invalid arguments
her er min windows form: private void button8_Click(object sender, EventArgs e) { Reservering r1 = new Reservering("silas", new DateTime(2008, 04, 22)); Reservering r2 = new Reservering("kurt", new DateTime(2008, 04, 23)); Reservering r3 = new Reservering("Peter", new DateTime(2008, 04, 24)); Flaske f1 = new Flaske(r1, "ok", 43); f1.addReservartion(r2); f1.addReservartion(r3);
f1.datoer_makeDatoSublist("kurt");
//this is the problem. AddRange listBox2.Items.AddRange(f1.datoer_GetAllDatoSublist());
}
og her er GetAllDatoSublist fra klassen: public DateTime[] datoer_GetAllDatoSublist() { return sublistNavne.ToArray();
}
og her er hvordan sublisten bliver lavet:
public List<DateTime> sublistNavne = new List<DateTime>();
public DateTime[] datoer_makeDatoSublist(string navn) { foreach (Reservering en_reservering in reserveringsliste)
if (en_reservering.PropertyReserveringsnavn == navn)
wow ... den kan jeg ikke lige dreje ... kan også se du er andre steder på nettet for at finde svar på det ...
Indtil du finder andne løsning kan du gøre sådan her: listBox1.BeginUpdate(); foreach (DateTime dt in list) { listBox1.Items.Add(dt); } listBox1.EndUpdate();
Problemet er at AddRange() forventer at få et object[] som argument. Du forsøgte at give den et DataTime[] argument i stedet - og det brokker den sig for.
Normalt ville man klare dette ved at caste. Men selvom en enkelt DateTime sagtens kan castes til object (kaldes boxing) så kan et array imidlertid ikke.
Løsningen er altså at lave din DateTime[] om til en object[]. Det er det Cast<object> gør: Den løber igennem DateTime[] arrayet et element af gangen og caster det til typen object. Desværre er resultatet ikke et object[] men noget der næsten ligner - det er en IEnumarable<object> - det er i hvert fald tilstrækkelig godt til at et enkelt kald til ToArray() gør resten.
er lige i gang med at bruge det omvendt, at bruge en aflæsning fra en liste som en DateTime i min metode, kan jeg der også bruge LINQ eller skal jeg gøre noget helt andet.
her er hvordan jeg kalder metoden listBox2.Items.Add(f1.getDato(listBox1.SelectedItem)); //(virker ikke)
kunne det gøres sådan: listBox2.Items.Add(f1.getDato.Cast<object>(listBox1.SelectedItem)); //(virker måske?)
her er metoden fra klassen public string getDato(DateTime dato1) { foreach (Reservering en_reservering in reserveringsliste)
if (en_reservering.PropertyDato == dato1) { return en_reservering.PropertyReserveringsnavn; } return "datoen er fri"; }
getDato method navnet er _MEGET_ misvisende hvad det gør ...
public bool IsDateAvailble(DateTime dato1) // og så kigger jeg på koden igen ... og k an ikke helt se sammenhængen ... tror du skal ombøbe nogen af dine varibler, method's, etc. Mest så vi andre bedre kan nemmemskue hvad der sker, når det ikke er vores kode. Det bliver også nemmere for dig selv hvis det bliver lagt på bordet i 2 måneder og du skal tilbage og arbejde med det igen ...
Du burde få nogle compile fejl på overstående ...
Du har ikke en method der har sammen method header ( f1.getDato bruger du som en property )
Det ser lidt ud som om du gætter ... SelectedItem er vist af typen "ListItem" ... der skal du så tage din Value ud som du vil bruge ... og caste den til en DateTime .. og derefter sende den til funktionen
Error 3 The best overloaded method match for 'Software4divers.SuperResurser.getDato(System.DateTime)' has some invalid arguments Error 4 Argument '1': cannot convert from 'object' to 'System.DateTime'
problemet er bare at jeg skal have castet min value så den kan bruges i min funktion, men hvordan caster jeg en værdi fra listen til en DateTime
klart ... no harm done, nielle har bestemt mere erfaring, og den cast ting havde jeg ikke lige gennemskuet ... selvom jeg egentlig godt vidste den var der ....
nielle: Nu er LINQ jo først med fra 3.5, men hvordan ville overstående bliver gjort i .NET 2.0 ?
I 3.0 og tidliger er der vist kun den metode du har skitseret i 26/04-2008 02:05:34.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.