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
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 に答える
0
Type type = asm.GetType("person");

asm.GetType 関数には、オブジェクトの型を文字列形式でのみ渡すことができます。もう1つは、asmオブジェクトをどこで宣言したかです。そうでない場合は、最初に定義してください。

于 2012-07-18T12:31:48.220 に答える