Errore del compilatore CS1954

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#)