Объект, созданный из объекта класса, не позволяет получать значения свойств

У меня есть объект, созданный из класса «объект», и он содержит список, который я создал. Список представляет собой набор объектов, созданных из класса под названием «MyClass». И этот класс содержит два строковых свойства.

public Class MyClass 
{
    private string _propOne;
    public string PropOne
    {
       get {return _propOne;}
       set {_propOne=Value;}
    }

    private string _propTwo;
    public string PropTwo
    {
       get {return _propTwo;}
       set {_propTwo=Value;}
    }
}

У меня есть метод, который возвращает объект класса "объект"

private object GetData() 
{
    // It converts the list created to an object created from the class "object"
}

Затем я вызываю метод, как показано ниже.

object temp=GetData();

Теперь я хочу перебрать «temp» и назначить его другому списку, созданному из объектов класса «MyClass».

private List<MyClass> _anotherCollection;
public List<MyClass> AnotherCollection
{
   get {return _anotherCollection;}
   set {_anotherCollection=Value;}
}

........................

foreach (var a in temp.GetType().GetProperties())
{
   object firstParam = "PropOne";
   object secondParam = "PropTwo";
   AnotherCollection.Add(new MyClass() { PropOne = a.GetValue(firstParam), PropTwo = a.GetValue(PropTwo) });
}

Но это дает мне следующую ошибку компиляции.

Невозможно неявно преобразовать тип «объект» в «строку». Существует явное преобразование (вам не хватает приведения?)

Может ли кто-нибудь помочь мне исправить это?


person nidarshani fernando    schedule 12.10.2015    source источник
comment
GetValue ожидает строку в качестве параметра, вы передаете object. Измените object firstParam = на string firstParam и то же самое на secondParam.   -  person odyss-jii    schedule 12.10.2015


Ответы (1)


Вы должны преобразовать возвращенный объект из GetValue в string. Компилятор не знает, что object, возвращаемый из GetValue, на самом деле является string, поэтому вы должны сообщить ему об этом вот так.

Кроме того, вы должны передать экземпляр, для которого вы пытаетесь получить значение (в данном случае temp):

PropOne = (string)a.GetValue(temp)
person Patrick Hofman    schedule 12.10.2015
comment
Теперь есть исключение, говорящее, что объект не соответствует целевому типу. - person nidarshani fernando; 12.10.2015
comment
Вы использовали temp также для второго вызова? - person Patrick Hofman; 12.10.2015
comment
Нет. Единственное место, где я использую temp, — это цикл foreach. Это единственное место - person nidarshani fernando; 12.10.2015
comment
Я сделал. Это тоже не работает. ошибки нет. Но коллекция содержит некоторые числа, а это не то, что мне нужно. Data.Add(new MyClass() { PropOne = (a.GetValue(temp)).ToString(), PropTwo = (a.GetValue(temp)).ToString() }); - person nidarshani fernando; 12.10.2015
comment
Итак, какие свойства (a) вы получили? - person Patrick Hofman; 12.10.2015
comment
В коллекции он содержит некоторые числа, например: - person nidarshani fernando; 12.10.2015