该propertyObject的值与c#中的目标类型不匹配(通过反射获取属性值)

该propertyObject的值与c#中的目标类型不匹配(通过反射获取属性值),c#,reflection,C#,Reflection,我有一个包含此属性的类 public List<string> Messages { get; set; } 而不是 var message = prop.GetValue(messages); 但是我仍然得到了相同的错误。属性信息包含有关消息属性的元数据。您可以使用该PropertyInfo在该类型的某个实例上获取或设置该属性的值。这意味着您需要将要从中读取属性Messages的类型实例传递到GetValue调用中: messages = (List<string>

我有一个包含此属性的类

public List<string> Messages { get; set; }
而不是

var message = prop.GetValue(messages);

但是我仍然得到了相同的错误。

属性信息包含有关消息属性的元数据。您可以使用该PropertyInfo在该类型的某个实例上获取或设置该属性的值。这意味着您需要将要从中读取属性
Messages
的类型实例传递到GetValue调用中:

messages = (List<string>)prop.GetValue(instanceOfMyType);
messages=(List)prop.GetValue(instanceOfMyType);
以下是您正在尝试做的工作示例:

class A
{
    public List<string> Messages { get; set; }

    public static void Test()
    {
        A obj = new A { Messages = new List<string> { "message1", "message2" } };
        PropertyInfo prop = typeof(A).GetProperty("Messages");
        List<string> messages = (List<string>)prop.GetValue(obj);
    }
}
A类
{
公共列表消息{get;set;}
公共静态无效测试()
{
A obj=新A{Messages=新列表{“message1”、“message2”};
PropertyInfo prop=typeof(A).GetProperty(“消息”);
列表消息=(列表)属性GetValue(obj);
}
}

仅就记录而言,这种实现在现实生活中毫无意义,因为您可以直接通过
obj获取值。Messages

属性info包含有关Messages属性的元数据。您可以使用该PropertyInfo在该类型的某个实例上获取或设置该属性的值。这意味着您需要将要从中读取属性
Messages
的类型实例传递到GetValue调用中:

messages = (List<string>)prop.GetValue(instanceOfMyType);
messages=(List)prop.GetValue(instanceOfMyType);
以下是您正在尝试做的工作示例:

class A
{
    public List<string> Messages { get; set; }

    public static void Test()
    {
        A obj = new A { Messages = new List<string> { "message1", "message2" } };
        PropertyInfo prop = typeof(A).GetProperty("Messages");
        List<string> messages = (List<string>)prop.GetValue(obj);
    }
}
A类
{
公共列表消息{get;set;}
公共静态无效测试()
{
A obj=新A{Messages=新列表{“message1”、“message2”};
PropertyInfo prop=typeof(A).GetProperty(“消息”);
列表消息=(列表)属性GetValue(obj);
}
}

为了记录在案,这种实现在现实生活中毫无意义,因为您可以通过
obj.Messages

直接获得值,为什么不只是“List Messages=yourClassObj.Messages;”?我有特定的情况,这就是为什么我不想使用这种方式。
GetProperty
没有接受字符串列表的重载。您希望得到什么结果?请看这里,您可以传递类型的实例为什么不只是“List messages=yourClassObj.messages;”?我有一个特定的情况,这就是为什么我不想使用这种方式。
GetProperty
没有一个重载来获取字符串列表。您希望得到什么结果?请看这里您可以传递类型的实例我传递了类型的实例,但仍然有错误如果您查看我的示例,确切地说我将类型“messages”的实例传递给prop.GetValue(messages);列表消息=新列表();您传递了
List
的实例,而不是
myType
的实例。在您的示例中,myType是什么不可见。我在回答中加入了一个有效的例子。您应该能够在代码中重用它。非常感谢。您的观点是有效的观点“只是为了记录,这个实现在现实生活中没有意义,因为您可以直接通过obj.Messages获得值”。我修改了标题。仅供参考,出于某些原因,我想通过反射实现它。如果我想提及所有原因,可能会引起其他人的混淆。我传递了我类型的实例,但仍然存在错误。如果您查看我的示例,确切地说,我将我类型“messages”的实例传递给了prop.GetValue(messages); 列表消息=新列表();您传递了
List
的实例,而不是
myType
的实例。在您的示例中,myType是什么不可见。我在回答中加入了一个有效的例子。您应该能够在代码中重用它。非常感谢。您的观点是有效的观点“只是为了记录,这个实现在现实生活中没有意义,因为您可以直接通过obj.Messages获得值”。我修改了标题。仅供参考,出于某种原因,我想通过反思来实现它。如果我想提及所有原因,可能会给其他人带来困惑。