Jon Skeetの答えは絶対に正しいです(彼には他の種類がありますか?)。たとえば、1000個のInventoryItemオブジェクトに動的にアクセスする必要がある場合にうまく機能します。しかし、より多くのオブジェクト、たとえば1,000万に動的にアクセスする必要がある場合、反射は非常に遅くなり始めます。少し前に作成したヘルパークラスがあり、プロパティにアクセスするための動的メソッドを作成してコンパイルすることで、リフレクションよりも約26倍速くプロパティに簡単にアクセスできます(少なくとも私のコンピューターでは)。静的にアクセスするほど高速ではありませんが、動的にアクセスする必要があるため、それも考慮事項ではありません。使用方法は次のとおりです。
var accessor = new DynamicPropertyAccessor(typeof(InventoryItem).GetProperty("ItemCode"));
foreach (var inventoryItem in warehouse13)
{
Console.WriteLine("{0}: {1}", accessor.Name, accessor[inventoryItem]);
}
これを使用して、次の値を設定することもできますaccessor[item] = "newValue"
。また、複数のプロパティに動的にアクセスする必要がある場合は、アクセサーのコレクションを作成できます。DynamicPropertyAccessor
プロパティごとに1回作成し、再利用して多くのオブジェクト(または同じオブジェクトに何度もアクセス)にアクセスすると、パフォーマンスが大幅に向上します。
DynamicPropertyAccessor
ここにクラスを投稿しました: https ://gist.github.com/3059427