argh stadig et problem... hvis noden ikke findes, så skal jeg returnere et eller andet... int.MinValue eller noget for primitiver og null for komplekse type. hvordan så det?
Et sidste forslag. Hvis koden som kalder metoden vil vide om noden var null, vil du få problemer med ovenstående, da default værdien er 0. Så vil du altså ikke kunne kende forskel på 0 og null.
Denne lille udvidelse vil ordne dette:
private bool GetValue<T>(XmlNode node, string key, out T value) { XmlNode subnode = node.SelectSingleNode(key);
if (subnode == null || string.IsNullOrEmpty(subnode.InnerText)) { value = default(T); return false; } else { value = (T)Convert.ChangeType(stringVal, typeof(T)); return true; } }
Ovenstående vil returnere false, hvis der ikke var en værdi, og true hvis der er en værdi. Værdien returneres i output parameteren "value".
Når metoden kaldes, gøres sådan:
int value; if (GetValue<int>(myNode, myKey, out value) { //Hvis den kommer ind i denne if, var der en værdi. } else { //Hvis den kommer ind i else-delen, var der ikke en værdi. }
Jeg kan ikke lide at bruge value som variabel navn, da det er et keyword i property set'ers.
3)
Med hensyn til:
(T)Convert.ChangeType(stringVal, typeof(T))
så er det vigtigt at forstå at den ikke virker per magi.
Den kan ikke konvertere fra hvad som helst til hvad som helst.
Den kan konvertere hvis: - input implementerer IConvertible (det gør string) - output eksisterer som en To metode i IConvertible (det gør int, double, bool, string etc.)
#20 3) er en god pointe. Ulempen ved at bruge generics på denne måde er at det åbner for nogle runtime fejl jeg kunne have fanget på compile time hvis jeg havde droppet generics og lavet metoder til de typer input jeg skal konvertere. F.eks. giver det en runtime exception at fodre metoden med en Guid. Det er dog en praktisk lille metode da jeg fra Microsoft CRM's webservice får en masse værdier tilbage der typisk er guids, strings, ints, double, datetime osv. Med lidt viden om hvad jeg forventer at få tilbage fra CRM giver det her en elegant løsning på at parse resultater.
tak for hjælpen gutter, points til aaberg_cc for den første løsning der compiler ;)
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.