[ACCEPTED]-cast anonymous type to an interface?-anonymous-types
The best "workaround" is to create 5 and use a normal, "named" type 4 that implements the interface.
But if you 3 insist that an anonymous type be used, consider 2 using a dynamic interface proxy framework 1 like ImpromptuInterface
.
var myInterface = new { x = 44, y = 55 }.ActLike<ICoOrd>();
No, anonymous types never implement interfaces. dynamic
wouldn't 5 let you cast to the interface either, but 4 would let you just access the two properties. Note 3 that anonymous types are internal
, so if you want 2 to use them across assemblies using dynamic
, you'll 1 need to use InternalsVisibleTo
.
I know this is an old question and answers 12 but I stumbled on this on this looking to 11 do exactly the same thing for some unit 10 tests. I then occurred to me that I am already 9 doing something like this using Moq (facepalm).
I 8 do like the other suggestion for ImpromptuInterface 7 but I am already using Moq and feel like 6 it having a larger following (that is opinion 5 and not fact) will be more stable and supported 4 longer.
so for this case would be something 3 like
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: just adding another way to mock the 2 cord, started doing it this way and like 1 it a little better.
public void AnotherTest()
{
var aCord = Mock.Of<ICoOrd>(c => c.X == 44 && c.Y == 55);
//do stuff with aCord
}
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.