IL では、switch ステートメントは次のようにコンパイルされます。
// ...
L_000c: ldloc.1
L_000d: ldstr "case1"
L_0012: call bool [mscorlib]System.String::op_Equality(string, string)
L_0017: brtrue.s L_0035
L_0019: ldloc.1
L_001a: ldstr "case2"
L_001f: call bool [mscorlib]System.String::op_Equality(string, string)
L_0024: brtrue.s L_0042
L_0026: ldloc.1
L_0027: ldstr "case3"
L_002c: call bool [mscorlib]System.String::op_Equality(string, string)
L_0031: brtrue.s L_004f
// ...
すべてのケースでこれを適切に分析できるコードを作成するには、かなりの作業が必要です。
これをテストする唯一の方法は、実際にすべてのケースをカバーし、PropertyInfo が null にならないようにすることです。作業しているコードが非常に重要で失敗できない場合、いずれにせよリフレクションを使用するのはおそらくかなり危険です。より型安全な設計に移行できますか?