C# 从类创建的对象";“对象”;不允许检索属性值

C# 从类创建的对象";“对象”;不允许检索属性值,c#,object,reflection,propertyinfo,C#,Object,Reflection,Propertyinfo,我有一个从类“object”创建的对象,它包含我创建的列表。该列表是从名为“MyClass”的类创建的对象的集合。并且,该类包含两个字符串属性 public Class MyClass { private string _propOne; public string PropOne { get {return _propOne;} set {_propOne=Value;} } private string _propTwo

我有一个从类“object”创建的对象,它包含我创建的列表。该列表是从名为“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;}
    }
}
我有一个方法,它返回一个“object”类的对象

然后我调用如下所示的方法

object temp=GetData();
现在我想迭代“temp”,并将其分配给从类“MyClass”的对象创建的另一个列表

private List\u另一个集合;
公开列出其他收藏
{
获取{return\u其他集合;}
设置{uAnotherCollection=Value;}
}
........................
foreach(temp.GetType().GetProperties()中的变量a)
{
object firstParam=“PropOne”;
对象secondParam=“PropTwo”;
Add(new MyClass(){PropOne=a.GetValue(firstParam),PropTwo=a.GetValue(PropTwo)});
}
但它给了我以下编译错误

无法将类型“object”隐式转换为“string”。存在显式转换(是否缺少强制转换?)


有人能帮我修一下吗

您必须将返回的对象从
GetValue
强制转换为
string
。编译器不知道从
GetValue
返回的
对象
实际上是一个
字符串
,因此您必须这样告诉它

此外,您还必须传入您试图获取其值的实例(
temp
,在本例中):


GetValue
需要字符串作为参数,您正在传递一个
对象
。将
object firstParam=
更改为
string firstParam
,对于
secondParam
也是如此。现在出现了一个异常,即“object not match target type”(对象与目标类型不匹配),您是否在第二次调用中也使用了
temp
?否。我唯一使用“temp”的地方是在foreach循环中。那是我唯一去过的地方。它也不起作用。没有错误。但是这个集合包含的是一些数字,这不是我想要的。Add(new MyClass(){PropOne=(a.GetValue(temp)).ToString(),PropTwo=(a.GetValue(temp)).ToString()});那么您检索到的属性(
a
)是什么?
object temp=GetData();
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) });
}
PropOne = (string)a.GetValue(temp)