次のコードを検討してください。
public class MyClass
{
public MyClass(Type optionsClassType)
{
//A PropertyInfo[0] is returned here
var test1 = optionsClassType.GetProperties();
//Even using typeof
var test2 = typeof(MyClassOptions).GetProperties();
//Or BindingFlags
var test3 = typeof(MyClassOptions)
.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public);
}
}
public class MyClassOptions
{
public int MyProperty { get; set; }
}
PropertyInfo[]
について取得できませんMyClassOptions
。Type.GetProperties
常に空の配列を返します。最初は Xamarin.iOS のフレームワークのバグだと思っていましたが、同じフレームワークを対象とする別のプロジェクトで同じコードをテストしたところ、問題なく動作しました。
誰でもこれの考えられる原因を知っていますか?
編集
@Fabian Biglerの回答に感謝します。私のプロジェクトでは、リンカが中程度の動作に設定されていても、インスタンス化MyClassOptions
は実行時にクラス定義を維持するのに十分ではありませんでした。実際にインスタンスを使用した後 (プロパティの設定など) にのみ、クラスはビルドに保持されます。
リンカーは「未使用」のものをダミーに置き換えているようです。このプロジェクトではリフレクションを頻繁に使用するため、リンカーを無効にしただけで、すべてが再び機能しています。