我试图使用反射(最终在编译时未知) object
,其中包括struct
。 据我已经得到了TypedReference.MakeTypedReference
但我碰了壁。
这里是我的class和struct
public class MyObject
{
public int Id;
public Money Amount;
}
public struct Money
{
public int Vaule;
public string Code;
}
这里是我在尝试使用反射来设置的“量”,“守则”在为MyObject。 正如我上面提到的,我正在寻找不知道这些类型在编译时的解决方案(这将是太容易了!)
下面是我到目前为止的代码(我用[0],[1],使代码更简单)
var obj = new MyObject() { Id = 1 };
obj.Amount.Vaule = 10;
obj.Amount.Code = "ABC";
FieldInfo[] objFields = obj.GetType().GetFields();
FieldInfo[] moneyFields = objFields[1].GetValue(obj).GetType().GetFields();
List<FieldInfo> fields = new List<FieldInfo>() { objFields[1] };
fields.AddRange( moneyFields );
TypedReference typeRef = TypedReference.MakeTypedReference(
objFields[1].GetValue( obj ), fields.ToArray() );
moneyFields[1].SetValueDirect( typeRef, "XXX" );
该TypedReference.MakeTypedReference吹了; “字段信息不匹配目标类型。” 同样,如果我传递objFields[1]
如果只是通过moneyFields
我得到“TypedReferences不能被重新定义为基元。”
为什么? 比方说,我创建随机测试夹具和要填充用随机数据类字段:)