反射 - 无法复制propertyValue

时间:2014-05-11 13:06:37

标签: c# reflection

有人会认为这应该是微不足道的。但是,我必须做错事,而我却无法理解。

作为WebAPI2项目的一部分,我有一个简单的接口IDefaultView

public class IDefaultView
    {
        public Guid Id { get; set; }
        //....other properties
    } 

以及实现此接口的类View。

public class View : IDefaultView
    {
        public string Description  { get; set; }

        public View(MyObject obj)
        {
            Id = obj.Id;
            //....other properties
            Description = obj.Description;
        }
    }

View Class实际上是API控制器使用的DTO。

我目前正在尝试各种解决方案来执行API控制器单元测试,其中包括创建BaseTestClass。 BaseTestClass的简化轮廓如下所示。

public class BaseTestClass<entityViewClass> where entityViewClass : IDefaultView
    {
        public void Method1 ()
        {
            //...stripped out code
            //controller below is a reference to the controller, whose addNew(item) method results in a CreatedAtRouteNegotiatedContentResult<View> object.
            var result = controller.addNew(item) as CreatedAtRouteNegotiatedContentResult<entityViewClass>;
            string newDescription = GetPropertyValue(result.Content, "Description").ToString ();
            //...stripped out code
        }
        public object GetPropertyValue(object obj, string propertyName)
        {
            var objType = obj.GetType();
            var prop = objType.GetProperty(propertyName);
            return prop.GetValue(obj, null);
        }
    }

我在使用反射访问Description属性时遇到了一些我无法理解的行为,因为它从未被分配到newDescription变量。

我在GetPropertyValue(result.Content, "Description").ToString ()添加了一个断点和一个监视,它显示了正确的属性值。但是,newDescription变量永远不会被设置。监视窗口甚至显示:当前上下文中不存在名称“newDescription”。

我最初认为这与接口定义不包含Description属性这一事实有关,但Description属性可由手表确认访问。

我错过了什么?如果有任何人遇到同样的问题或对发生的事情有任何想法,我将不胜感激。

谢谢!

0 个答案:

没有答案