2009-12-08 17 views
10

Sto tentando di impostare una proprietà dei miei controlli .ascx da un .aspx utilizzando tale controllo.Errore: Impossibile convertire implicitamente il tipo "void" in "System.Collections.Generic.List"

Quindi, in uno dei miei aspx che ha questo controllo in esso, ho il seguente codice cercando di impostare la proprietà ItemsList della mia .ascx incorporato:

Item item = GetItem(itemID); 
myUsercontrol.ItemList = new List<Item>().Add(item); 

La proprietà nel .ascx che sto cercando di impostare assomiglia a questo:

public List<Item> ItemsList 
{ 
    get { return this.itemsList; } 
    set { this.itemsList = value; } 
} 

Errore: Impossibile convertire implicitamente il tipo 'vuoto' a 'System.Collections.Generic.List'

0.123.

Quindi non capisco dove sta diventando vuoto come parte della proprietà? ... strano.

risposta

25

Non è possibile farlo perché la funzione Aggiungi restituisce void, non un riferimento all'elenco. Si può fare questo:

mycontrol.ItemList = new List<Item>(); 
mycontrol.ItemList.Add(item); 

o utilizzare un collection initializer:

mycontrol.ItemList = new List<Item> { item }; 
+0

Ho avuto un errore di registrazione, ho letto il post aggiornato – PositiveGuy

+0

Ho creato una nuova istanza della lista con la nuova parola chiave, perché aggiungerebbe qualcosa da fare con il reutrning della NUOVA istanza che ho già specificato? Sto solo aggiungendo il contenuto alla serie di liste – PositiveGuy

+0

@cofffeeaddict: Stai tentando di impostare una proprietà che si aspetta un'istanza della lista. Il metodo 'Add' è nullo. – shahkalpesh

1
ItemListt.ItemList = new List<Item>().Add(item); 

Il metodo Add restituisce un'istanza di una classe basata su elenco?

EDIT: No, questa link per la documentazione su List<T>.Add

EDIT2: provare a scrivere questo pezzo di codice & vedere qual è il valore di ritorno di Add metodo.

List<Item> items = new List<Item>(); 
var modifiedList = items.Add(myItem); 

Vedrete che, il codice dovrebbe riuscire a Add perché restituisce void.

+0

ho avuto un errore inviando, leggere posta aggiornato. – PositiveGuy

+0

@coffeeaddict: ho aggiornato la pagina diverse volte. Ma non riesco a vedere eventuali modifiche nel codice. Il problema sta ancora nell'uso del metodo 'Add' che restituisce un vuoto. Utilizzare invece un inizializzatore di raccolta. 'new List () {item};' (Spero che questa sintassi sia corretta). – shahkalpesh

+0

grazie. Sì, capisco ora. – PositiveGuy

1

Dopo aver creato il List<Item> si sta chiamando immediatamente Aggiungi su di esso, che è un metodo di ritorno vuoto. Questo non può essere convertito nel tipo di ItemList.ItemList.

Si dovrebbe fare questo, invece:

var list = new List<Item>(); 
list.Add(item); 
ItemList.ItemList = list; 
0

Finché ItemList è istanziato sul tuo UserControl, si può solo fare UserControl.ItemList.Add(item)

+0

Perchè ItemList deve essere istanziato ovunque ma dove l'ho già istanziato. Ho usato la nuova parola chiave proprio lì, è già un'istanza! – PositiveGuy

+0

corretto, ma il metodo List .Add() ha un tipo di reso vuoto, quindi non è possibile assegnarlo mycontrol.ItemList(). Dovresti o metterlo in risalto separatamente su un'altra linea, o usare un inizializzatore di raccolta. La mia risposta si applica se hai già eseguito l'istanziazione. –

0

Il metodo Add non restituisce un riferimento all'elenco. Bisogna farlo in due fasi:

ItemListt.ItemList = new List<Item>(); 
ItemListt.ItemList.Add(item); 

In alternativa usare una variabile locale per contenere il riferimento prima di metterlo nella proprietà:

List<Item> list = new List<Item>(); 
list.Add(item); 
ItemListt.ItemList = list; 
1
new List<Item>().Add(item); 

Questa linea restituisce void.

Prova:

var list = new List<Item>(); 
list.Add(item); 
ItemListt.ItemList = list; 
+0

Fortunato. cliccato plus1 per errore. – aMazing

Problemi correlati