Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Messaggio di errore
La corrispondenza migliore del metodo di overload 'method' per l'elemento inizializzatore dell'insieme non può essere utilizzata. I metodi 'Add' dell'inizializzatore di insieme non possono avere parametri ref o out.
The best overloaded method match 'method' for the collection initializer element cannot be used. Collection initializer 'Add' methods cannot have ref or out parameters.
Affinché una classe di insiemi venga inizializzata mediante un inizializzatore di insieme, è necessario che la classe contenga un metodo publicAdd che non sia un parametro ref o out.
Per correggere l'errore
Se è possibile modificare il codice sorgente della classe di insiemi, fornire un metodo Add che non accetti un parametro ref o out.
Se non è possibile modificare la classe di insiemi, inizializzarla con i costruttori forniti. In questo caso, non sarà possibile utilizzare un inizializzatore di insieme.
Esempio
Nell'esempio seguente viene generato l'errore CS1954 poiché l'unico overload disponibile dell'elenco Add in MyList contiene un parametro ref.
// cs1954.cs
using System.Collections.Generic;
class MyList<T> : IEnumerable<T>
{
List<T> _list;
public void Add(ref T item)
{
_list.Add(item);
}
public System.Collections.Generic.IEnumerator<T> GetEnumerator()
{
int index = 0;
T current = _list[index];
while (current != null)
{
yield return _list[index++];
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class MyClass
{
public string tree { get; set; }
}
class Program
{
static void Main(string[] args)
{
MyList<MyClass> myList = new MyList<MyClass> { new MyClass { tree = "maple" } }; // CS1954
}
}
Vedere anche
Riferimenti
Inizializzatori di oggetto e di insieme (Guida per programmatori C#)