PropertyInfo.GetValue/SetValueメソッドを使うとプロパティの値の取得・設定を行うことができます。 インデクサ(既定のプロパティ、引数を持つプロパティ)に対する値の設定・取得もこのメソッドで行います。

.NET Framework 4.0以前の場合、PropertyInfo.GetValue/SetValueメソッドでは引数objの他に引数indexも指定する必要があります。 この引数はプロパティがインデクサの場合にインデックスとして使用される値を指定するためのものです。 プロパティがインデクサでない場合は引数indexnull/Nothingを指定します。

.NET Framework 4.5以降では引数indexを必要としないオーバーロードが用意されているため、インデクサではないプロパティではインデックスの指定を省略することができます。

PropertyInfoを使ってプロパティの値を取得・設定する
using System;
using System.Reflection;

class C {
  public int P { get; set; }
}

class Sample {
  static void Main()
  {
    Type t = typeof(C);

    object inst = Activator.CreateInstance(t);

    // プロパティPのPropertyInfoを取得する
    PropertyInfo p = t.GetProperty("P");

    // プロパティに値42を設定する
    p.SetValue(inst, 42); // .NET Framework 4.5以降の場合
    //p.SetValue(inst, 42, null); // .NET Framework 4.0以前の場合

    // プロパティの値を取得する
    Console.WriteLine("P = {0}", p.GetValue(inst)); // .NET Framework 4.5以降の場合
    //Console.WriteLine("P = {0}", p.GetValue(inst, null)); // .NET Framework 4.0以前の場合
  }
}
実行結果
P = 42

プロパティ参照の結果例外が発生した場合、TargetInvocationExceptionがスローされます。 実際にスローされた例外を取得する方法などについて詳細は§.呼び出し時の例外 (TargetInvocationException)を参照してください。