Seems to be an issue using Dump on an object in some cases
The following code snippet is not returning expected results when using the Dump extension on an object cast to an interface it implements, notably an interface with a "new" member hiding a parent member, in this case the Value property.
Only the first group of Dumps and all of the Dumps explicitly on the Value properties are correct.
I've attached an example of the output at the end of this post
void Main() { var foo = new Foo(); IFoo iFoo = foo; IFooNew iFoorNew = foo; updateFoo(foo); foo.Value.Dump(); iFoo.Value.Dump(); iFoorNew.Value.Dump(); foo.Dump(); iFoo.Dump(); iFoorNew.Dump(); foo = new Foo(); iFoo = foo; iFoorNew = foo; updateIFoo(foo); foo.Value.Dump(); iFoo.Value.Dump(); iFoorNew.Value.Dump(); foo.Dump(); iFoo.Dump(); iFoorNew.Dump(); // dump is not correct foo = new Foo(); iFoo = foo; iFoorNew = foo; updateIFooNew(foo); foo.Value.Dump(); iFoo.Value.Dump(); iFoorNew.Value.Dump(); foo.Dump(); iFoo.Dump(); iFoorNew.Dump(); // dump is not correct } void updateFoo(Foo foo) { "foo".Dump(); foo.Value = 3; } void updateIFoo(IFoo foo) { "IFoo".Dump(); foo.Value = 3; } void updateIFooNew(IFooNew foo) { "IFooNew".Dump(); foo.Value = 3; } public interface IFoo { int Value { get; set; } } public interface IFooNew : IFoo { new int Value { get; set; } } public class Foo : IFooNew { public int Value { get; set; } int IFooNew.Value { get; set; } int IFoo.Value { get; set; } }
Comments
Thanks - I'll get a fix into the next LINQPad 6 build.