|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
[C#]Riferimento a un oggetto non impostato su un'istanza di oggetto.
Ottengo questo errore (Riferimento a un oggetto non impostato su un'istanza di oggetto.) nel seguente codice. Eppure ho scritto TagLib.Tag[] tag = new TagLib.Tag[risultati_gracenote.Elements().Count()]; Che cosa non ho capito? (in grassetto ecco la parte che mi da errore, anche se suppongo che anche le altre 2 righe dopo lo darebbero
![]() Codice:
TagLib.Tag[] tag = new TagLib.Tag[risultati_gracenote.Elements().Count()]; Console.WriteLine("Indice array è uguale a " + risultati_gracenote.Elements().Count()); for (int a = 1; a <= risultati_gracenote.Elements().Count(); a++) { Console.WriteLine("a è uguale a " + a); Console.WriteLine("titolo: " + risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1).Element("ul").Value); Console.WriteLine("artisti: " + risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1).Elements().ElementAt(3).Value); Console.WriteLine("album: " + risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1).Elements().ElementAt(5).Value); tag[a].Title = risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1).Element("ul").Value; tag[a].Performers[0] = risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1).Elements().ElementAt(3).Value; tag[a].Album = risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1).Elements().ElementAt(5).Value; } |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Quote:
Il for dovrebbe infatti partire da 0. Quindi, immagino, quello che e' risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1) vorrebbe esssere forse risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(0) Comunque ti consiglio di prendere i vari riferimenti, che tanto non costano assolutamente nulla e vengono risolti infase di compilazione. qualcosa come Codice:
var elementi = gracenote.Elements() var elemento = elementi[a]; var sottoelementi = elemento.Elements(); var sottoelemeno = sottoelementi[0]; Cosi' quando ti ritrovi questo errore puoi risalire a quale e' l'elemento nullo. Comunque, almeno il primo riferimento lo puoi ottenere ciclando direttamente sul primo elements(), che immagino implementi IEnumerable Codice:
foreach(var elemento in gracenote.Elements()) { etc. }
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Lo sapevo ma non pensavo fosse un problema se partisse da uno.. Quindi invece lo è?
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Quote:
risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1) se per esempio l'ultima collezione avesse 0 oppure 1 elemento solo, cercando di accedere tu al secondo elemento (che e' quello con indice 1), sollevi un'eccezione.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1310
|
credo che il problema sia che l'array è pieno di puntatori nulli.
L'operatore new sull'array non instanzia automaticamente tutti gli oggetti che contiene, quindi Codice:
Tag[a].Title = risultati_gracenote.Elements().ElementAt(a).Elements().ElementAt(1).Element("ul").Value; |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Uno dei tanti errori possibili.
PRocedendo prendendo i riferimenti, passo dopo passo, puoi mettere delle guard e notificare di conseguenza invece che lasciare sollevare l'eccezione.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#7 | ||
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
mi sembra mi desse qualche errore di compilazione..
EDIT: ho controllato e in fase di compilazione dà questo errore: Impossibile creare un'istanza della classe o dell'interfaccia astratta 'TagLib.Tag' Ultima modifica di Mattyfog : 01-04-2010 alle 11:55. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Io ho solo cercato di indovinare il tipo dal codice che hai postato e dato che tag è un array di TagLib.Tag pensavo che fosse un tipo concreto. In tal caso devi trovare nel codice qualche classe che implementi l'interfaccia o classe astratta TagLib.Tag o cercare nella documentazione della libreria. |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Ah, quindi non è un problema di sintassi... Mannaggia..
Credo che risolverò usando un array di string perchè non saprei proprio dove cercare il tipo nel codice sorgente.. ![]() |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1310
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Codice:
public class MyTag : TagLib.Tag { ... } Cosa intendi per "associarla anche a TagLib"? TagLib a quanto si può capire dal codice sembra essere un namespace, puoi sempre racchiudere la tua implementazione all'interno di quel namespace. |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Scusa è che sono ignorante... TagLib.Tag è un tipo di variabile che non posso ricreare da zero, credo. Infatti ha alcuni metodi che permettono di salvare un id3 tag su un file mp3. Tant'è che ho dovuto aggiungere questa libreria come dll. Se io faccio questa cosa, che hai detto tu, potrò ancora usufruire di questi metodi per salvare e leggere i tag mp3?
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Guarda che non era una proposta
![]() Era un tentativo, in assenza di altri dati, di trovare il problema. Non "ti propongo di sollevare un'eccezione", ma bensi' "facendo cosi', se bla bla, allora ti ritrovi a sollevare un'eccezione"
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Ti sei documentato su come funziona e nel caso specifico di come si usa questa classe TagLib.Tag? Se non lo sai te che conosci la libreria come pretendi che possiamo saperlo noi solo dal nome di una sua classe che scopriamo in seguito essere pure astratta? Non hai nemmeno riportato il nome di questa libreria. Questo post va avanti senza che tu abbia fornito dettagli utili, ma solo facendo domande a cui possiamo rispondere solo tirando ad indovinare da quel poco codice che hai postato. |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
si avete ragione, solo che io sono molto ignorante e pensavo fosse solo un errore di sintassi..
la libreria è questa: http://developer.novell.com/wiki/index.php/TagLib_Sharp non pretendo che vi leggiate i sorgenti pertanto userò un ia classe personalizzata.. ![]() |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1310
|
http://developer.novell.com/wiki/ind...harp:_Examples
Qua c'è un esempio di come usare 'sta liberira ![]() |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Ok grazie, ora parto per le vacanze se avrò ancora problemi vi farò sapere
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:01.