dado:IEnumerable <IMyInterface> Implícitamente de Class [] pero no de Struct []. ¿Por qué?
public interface IMyInterface{
}
public class MyClass:IMyInterface{
public MyClass(){}
}
public struct MyStruct:IMyInterface{
private int _myField;
public MyStruct(int myField){_myField = myField;}
}
¿Por qué puedo escribir:
IEnumerable<IMyInterface> myClassImps = new[] {
new MyClass(),
new MyClass(),
new MyClass()
};
Pero no:
IEnumerable<IMyInterface> myStructImps = new[]{
new MyStruct(0),
new MyStruct(1),
new MyStruct(2)
};
Lo que me da la siguiente advertencia:
Error 29 No se puede implícitamente convertir escriba 'MyApp.MyNS.MyStruct []' en 'System.Co llections.Generic.IEnumerable <MyApp.MyNS.IMyInterface> '
Y en lugar debe ser escrito:
IEnumerable<IMyInterface> myStructImps = new IMyInterface[]{
new MyStruct(0),
new MyStruct(1),
new MyStruct(2)
};
La pregunta está etiquetada con C# 3.0, ¿de qué varianza está hablando? –
@Darin Lo siento, citación equivocada –
Entiendo que veo que hay lagunas en mi respuesta, pero la única cosa que no entiendo acerca de esta explicación es que si esto es realmente solo un problema de covarianza, entonces ¿por qué puede instanciar asignar el enumerable con una matriz de 'MyClass', pero no con una matriz de 'MyStruct's'. Esto en particular fue por lo que pensé que esto tiene algo que ver con el boxeo. – LJM