object
にはstruct
を含むリフレクション(最終的には未知のコンパイル時)を使用しようとしています。私はTypedReference.MakeTypedReference
まで行ってきましたが、私は壁に衝突しました。Reflectオブジェクトの構造体のフィールドへのアクセス
は、ここに私のクラスと
public class MyObject
{
public int Id;
public Money Amount;
}
public struct Money
{
public int Vaule;
public string Code;
}
構造体
だとここで私はリフレクションを使用してMyObjectにして「量」の「コード」を設定しようとしています方法です。上で述べたように、コンパイル時にこれらの型についてわからない解決策を探しています(あまりにも簡単でしょう)ここで私はこれまでのコードを使用しています[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が吹きます。 "FieldInfoがターゲットタイプと一致しません。"同様に私はちょうどobjFields[1]
を渡す場合。そして、単にmoneyFields
を渡すと、 "TypedReferencesをプリミティブとして再定義することはできません。"
なぜですか?のは、私はランダムテスト・フィクスチャを作成し、ランダムなデータを持つクラスのフィールドを移入したいんだとしましょう:)
コンパイル時にMyObjectまたはMoneyを使用しているかどうかわからないので、どのオブジェクトが使用されているかを検出してプロパティを読み書きする必要がありますそれに応じて? – series0ne
AutoFixtureを使用し、反射Rube Goldbergマシンビジネスから抜け出す方法はありますか? (wrt 'struct'にもかかわらず、http://stackoverflow.com/questions/12930963/creating-a-struct-with-autofixture-throws-no-public-constructor-errorを参照してください)(' MakeTypedReference私は実際にツイートのストリームを一度見ていたので、何かを言いなさい!) –
@RubenBartelink - 「理由」は単に参考にしたものです。それが私がやっていたものなら、defo 'はAutoFixtureを使用しますか? –