リフレクションを使用して、一部のOpenXMLタイプ(たとえば、位置揃え)でプロパティを設定しようとしています。反射を経由して行うには、この困難をさせ何ジェネリック型と暗黙的な変換でのリフレクションの使用
// attr is an XmlAttribute, so .Name and .Value are Strings
if (attr.Name == "Val")
{
if (element is Justification)
{
((Justification)element).Val = (JustificationValues)Enum.Parse(typeof(JustificationValues), attr.Value);
return;
}
else
{
// test for dozens of other types, such as TabStop
}
}
:すべての可能性を列挙して値を割り当てることは単純明快である 1)ヴァルプロパティの型がT > EnumValue <あるので、私は知りませんEnum.Parseの最初の引数として渡す型を抽出する方法。 2)実際の列挙型からEnumValue < >型への暗黙的な変換があります。これは、リフレクションで呼び出す方法がわかりません。
私のようなものを探して終わるようにコードをしたいと思います:
PropertyInfo pInfo = element.GetType().GetProperty(attr.Name);
Object value = ConvertToPropType(pInfo.PropertyType, attr.Value); /* this
would return an instance of EnumValue<JustificationValues> in this case */
pInfo.SetValue(element, value, null);
どのように私はConvertToPropTypeを実装していますか?または、より良い解決策がありますか?
おかげで
編集: 私はエリカーの提案を使用して作業溶液を得たが、それは、列挙の型名は、ノードのタイプ名(「正当化」から得ることができるという便利な事実に依存している - >「JustificationValues」 )。私はまだ一般的なケースでこれを解決する方法が不思議です。
Edit2: GetGenericArgumentsは私の残りの部分を手に入れました。ありがとう。
をやっている何のために十分でしたか?プロパティタイプからenum型を取得する方法を示します。 –