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