2

请参阅下面的代码,有人可以帮助我....

public class person
{ 
  Public string name  { get; set; };  
  Public personDetails Pdetails { get; };
}

public class personDetails
{
  Public bool hasChild  { get; set; }
  Public string ChildName  { get; set; }
}


static void Main(string[] args)
{
    Type type = asm.GetType(person);

    object classInstance = Activator.CreateInstance(type); 


    PropertyInfo prop = type.GetProperty("Pdetails ", BindingFlags.Public | BindingFlags.Instance);

    if (null != prop && prop.CanWrite)
    {
        prop.SetValue(classInstance, null , null);
    }
}

找不到属性的错误。

4

5 回答 5

3

类成员是private默认的。使您的属性public,它应该工作。此外,删除属性字符串上的多余空格:"Pdetails".

于 2012-07-18T12:15:06.920 回答
3

您的属性名称中有一个额外的空格字符。"Pdetails "不一样"Pdetails"

于 2012-07-18T12:15:13.307 回答
3

财产Pdetails不是public,所以你BindingFlags应该是

BindingFlags.NonPublic | BindingFlags.Instance

另外,请参阅 Joel Etherton 的回答。

于 2012-07-18T12:15:18.977 回答
0
Type type = asm.GetType("person");

您只能将字符串格式的对象类型传递给 asm.GetType 函数。另一个是你在哪里声明了 asm 对象。如果你没有,那么先定义它。

于 2012-07-18T12:31:48.220 回答
0
static object GetPropertyValue(object obj, string propertyName)
        {
            var objType = obj.GetType();
            var prop = objType.GetProperty(propertyName);

            return prop.GetValue(obj, null);
        }
        static void SetPropertyValue(object obj, string propertyName, int values)
        {
            var objType = obj.GetType();
            var prop = objType.GetProperty(propertyName);
            prop.SetValue(obj, values, null);
        }

感谢您的支持,我已经使用上层代码解决了我的问题。

于 2012-07-19T08:06:28.263 回答