Error del compilador CS1954

Actualización: noviembre 2007

Mensaje de error

No se puede utilizar la mejor coincidencia de método sobrecargado 'método' para el elemento inicializador de colección. Los métodos 'Add' no pueden tener parámetros 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.

Para que una clase de colección se pueda inicializar mediante un inicializador de colección, la clase debe tener un método publicAdd que no sea un parámetro ref o out.

Para corregir este error

  • Si puede modificar el código fuente de la clase de colección, proporcione un método Add que no utilice un parámetro ref o out.

  • Si no puede modificar la clase de colección, inicialícela con los constructores que proporciona. No puede utilizar un inicializador de colección con ella.

Ejemplo

El ejemplo siguiente genera el error CS1954, ya que la única sobrecarga disponible de la lista de Add en MyList tiene un parámetro 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
    }
}

Vea también

Referencia

Inicializadores de objeto y de colección (Guía de programación de C#)