2016-03-03 2 views
0

У меня есть класс, который содержит это свойство.Значение этого свойстваObject не соответствует типу цели в C# (получить значение свойства с отражением)

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

Я хочу прочитать значение этого имущества с использованием отражения.

List<string> messages = new List<string>(); 
PropertyInfo prop = myType.GetProperty("Messages"); 
var message = prop.GetValue(messages); 

, но я получаю эту ошибку:

"Объект не соответствует целевому типу."

Я использовал эту строку:

var message = prop.GetValue(messages,null); 

вместо

var message = prop.GetValue(messages); 

, но до сих пор я получаю ту же ошибку.

+0

Почему не только «Список сообщений = yourClassObj.Messages;» ? –

+0

У меня есть конкретная ситуация, поэтому я не хочу так использовать. –

+0

'GetProperty' не имеет перегрузки, которая берет список строк. Что вы ожидаете получить в результате? –

ответ

2

PropertyInfo содержит метаданные о вашем свойстве Messages. Вы можете использовать этот PropertyInfo, чтобы получить или установить значение этого свойства в каком-либо экземпляре этого типа. Это означает, что вы должны передать экземпляр вашего типа, от которого вы хотите прочитать свойство Messages, в вызов GetValue:

messages = (List<string>)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); 
    } 
} 

Просто для записи, эта реализация не имеет смысла в реальной жизни, так как вы можете получить значение непосредственно через obj.Messages

+0

Я передал экземпляр моего типа, но все же у меня есть ошибка –

+0

If вы посмотрите на мой пример, я точно передал экземпляр «сообщений» моего типа в prop.GetValue (сообщения); Список messages = new Список (); –

+1

Вы передали экземпляр «Список », а не экземпляр 'myType'. В вашем примере не видно, что такое myType. В мой ответ я включил рабочий пример. Вы должны иметь возможность повторно использовать его в своем коде. – Edin

Смежные вопросы