PropertyDescriptor GetChildProperties не возвращает свойства из интерфейса расширения типа, который унаследовал другой интерфейс - PullRequest
1 голос
/ 26 октября 2010

3-й утверждение в этом тесте не выполняется, но если я переместу свойство Id из IEntity в IFoo, оно будет работать

Мне нужно получить все свойства, как это сделать? (без передачи экземпляра, по какой-то причине этот способ работает)

 [TestFixture]
    public class DescriptorTests
    {
        [Test]
        public void Test()
        {
            var bar = new Bar {Name = "bar",Foo = new Foo {Id = 1, Name = "foo"}};

            Assert.AreEqual(2, TypeDescriptor.GetProperties(bar).Count);
            Assert.AreEqual(2, TypeDescriptor.GetProperties(bar.Foo).Count);

            Assert.AreEqual(2, TypeDescriptor.GetProperties(bar)// this fails
                               .Find("Foo", false)
                               .GetChildProperties()
                               .Count); // the count is 1 instead of 2
        }

        public class Bar
        {
            public IFoo Foo { get; set; }
            public string Name { get; set; }
        }

        public interface IEntity
        {
            int Id { get; set; }
        }

        public interface IFoo : IEntity
        {
            string Name { get; set; }
        }

        public class Foo : IFoo
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
    }

1 Ответ

1 голос
/ 26 октября 2010

Я не знаю, является ли это тем, что вы ищете, но если вы передадите конкретный экземпляр в GetChildProperties (экземпляр объекта), он сработает:

        Assert.AreEqual(2, TypeDescriptor.GetProperties(bar)
                           .Find("Foo", false)
                           .GetChildProperties(bar.Foo)
                           .Count);

В вашем коде он вернет толькосвойства класса (IFoo), а не экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...