したがって、これは以前にSOで議論されましたが、なぜこれが発生するのかについての説明を見たことがないと思います。また、コードでリフレクションを使用しようとしている平均的な開発者にとって、これがどのように役立つかを知ることもできません。
したがって、このコードを確認してください。
var fields = typeof(Person).GetFields(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance);
List<int>
オブジェクトにが含まれている場合は、Person
リフレクション「Name」がに設定されているフィールドが返されます。List`1
辞書がある場合は、になりますDictionary`2
。表面的には、これは作業を困難にしているように見えますが、私は次のことを言うことはできません
foreach (var fieldInfo in fields.Where(fieldInfo => fieldInfo.FieldType == typeof(List<int>)))
{
//Do something.
}
これが出てくる理由は、私が現在取り組んでいるプロジェクトで次のことを見つけたからです。
//Initialize collections
FieldInfo[] properties = type.GetFields(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo f in properties)
{
if (f.FieldType.Name == "IList`1" && f.GetValue(obj) == null)
{
object value = Container.Resolve(f.FieldType);
f.SetValue(obj, value);
}
}
それから団結のための構成で私はこの幸福を見る
<alias alias="IList`1" type="System.Collections.Generic.IList`1, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
私はこれが悪いことを知っていることを本当に知りませんか?それは...ですか?もちろん動作しますが、これで問題がない場合でも(これにより、疑わしいコードダーが消えます)、元の質問は残ります。ジェネリックに関するディメンション情報は、プログラマーとしてどのようなメリットがありますか?