オブジェクトの解析に対して動的なテキストを実行しようとしていますが、構造体のネストされたプロパティ値を作成および設定するときに問題が発生しました。
構造体であるオブジェクトにプロパティがある場合、リフレクションを使用して構造体オブジェクトを取得し、そのプロパティ/フィールドのいずれかを設定するたびに、オブジェクトの値は変更されません。以下のオブジェクトグラフを見てください。
public struct MyStruct
{
public int MyIntProp {get;set;}
}
public class MyObj
{
public MyStruct NestedStruct {get;set;}
}
PropertyInfo pInfo = (myObj.GetType()).GetProperty("NestedStruct");
object nestedStruct = pInfo.GetValue(myObj); // This is the nested struct however it is only a copy not the actual object
PropertyInfo intInfo = (pInfo.PropertyType).GetProperty("MyIntProp");
intInfo.SetValue(nestedStruct, 23); // this sets the MyIntProp on the nestedStruct, but it is not set on the myObj.NestedStruct. My goal is to set object on that NestedStruct via reflection.
リフレクションを使用してNestedStructプロパティを取得し、その構造体にMyIntPropを設定しても、元のMyObj.NestedStruct.MyIntPropは変更されません。当然、これは構造体が値型であり、参照型ではないという事実に起因します。
したがって、本当の問題は、リフレクションを使用して値型への参照を取得する方法です。