variable type objeto new array anonimo c# interface anonymous-types

c# - type - ¿Convertir el tipo anónimo a una interfaz?



objeto anonimo c# (3)

La mejor "solución alternativa" es crear y usar un tipo normal, "denominado" que implemente la interfaz.

Pero si insiste en que se use un tipo anónimo, considere usar un marco de proxy de interfaz dinámico como ImpromptuInterface .

 var myInterface = new { x = 44, y = 55 }.ActLike<ICoOrd>();

Esto no parece ser posible? Entonces, ¿cuál es la mejor alternativa? ¿Expando / dinámico?

public interface ICoOrd { int x { get; set; } int y { get; set; } }

...

ICoOrd a = new {x = 44, y = 55};

árbitro:


No, los tipos anónimos nunca implementan interfaces. dynamic tampoco le permitiría acceder a la interfaz, pero le permitiría acceder solo a las dos propiedades. Tenga en cuenta que los tipos anónimos son internal , por lo que si desea usarlos en ensamblajes usando dynamic , deberá usar InternalsVisibleTo .


Sé que esta es una pregunta y respuestas antiguas, pero me topé con esto al tratar de hacer exactamente lo mismo para algunas pruebas unitarias. Entonces me di cuenta de que ya estaba haciendo algo como esto usando Moq (facepalm).

Me gusta la otra sugerencia para ImpromptuInterface, pero ya estoy usando Moq y creo que tener un mayor número de seguidores (es decir, opinión y no hechos) será más estable y se admitirá durante más tiempo.

Así que para este caso sería algo como

public interface ICoOrd { int X { get; set; } int Y { get; set; } } public class Sample { public void Test() { var aCord = new Mock<ICoOrd>(); aCord.SetupGet(c => c.X).Returns(44); aCord.SetupGet(c => c.Y).Returns(55); var a = aCord.Object; } }

EDIT : simplemente agregando otra forma de burlarse del cable, comenzó a hacerlo de esta manera y me gusta un poco mejor.

public void AnotherTest() { var aCord = Mock.Of<ICoOrd>(c => c.X == 44 && c.Y == 55); //do stuff with aCord }