estaba mirando C inicializadores # recolección y conocer la aplicación a ser muy pragmáticos, pero también muy diferente a cualquier otro en C#¿Por qué los inicializadores de colección C# funcionan de esta manera?
soy capaz de crear un código como éste:
using System;
using System.Collections;
class Program
{
static void Main()
{
Test test = new Test { 1, 2, 3 };
}
}
class Test : IEnumerable
{
public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
public void Add(int i) { }
}
Desde que satisfagan los requisitos mínimos para el compilador (implementado IEnumerable
y public void Add
) esto funciona, pero obviamente no tiene ningún valor.
Me preguntaba ¿qué impedía que el equipo de C# creara un conjunto más estricto de requisitos? En otras palabras, ¿por qué, para que esta sintaxis se compile, el compilador no requiere que el tipo implemente ICollection
? Eso parece más en el espíritu de otras características de C#.
Solo una nota para los desarrolladores web: se lanzará NotImplementedException si intentó serializar una instancia de esa clase a JSON (la implementación de IEnumerable hace que el serializador itere a través del objeto) – diachedelic