私は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();
もっと良い方法はありますか?