私はprotobuf-netv2(r480)を使用しており、メソッドMetaTypeを介して一部のメンバーが追加されたクラスがあります。Add()それらを列挙したい(ValueMemberオブジェクトのコレクションを取得したい)が、インデックスごとのインデクサーがあるにもかかわらず、でMetaTypeはないようIEnumerableです。
メンバーを列挙する方法としては、2つあります。MetaType内部実装が変更されると、プライベートフィールドでの反省が壊れます。ブルートフォース攻撃は、遅く、無駄で、ばかげています。
反射:
ValueMember[] fields = ((IEnumerable)typeof(MetaType)
.GetField("fields", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(metaType)).OfType<ValueMember>().ToArray();
ブルートフォース(簡潔にするためにLINQが使用され、forループの方がおそらく高速です):
ValueMember[] fields = Enumerable.Range(0, int.MaxValue).Select(i => metaType[i])
.Where(m => m != null).ToArray();
もっと良い方法はありますか?