私は本当に必要な以上にこれを見てきましたが、まだ完全な答えは分かりません。他の誰かが来て、より良い選択肢を提供してくれることを心から祈っています。
UWPでは、GetCustomAttributes()
を呼び出すと空の列挙が返されます。最初は、これはUWPアセンブリで行われたタイプストリッピングと関係があると思っていましたが、「.NETネイティブツールでコンパイル」オプションを有効にせずにDebugビルドで問題を再現できるので、アセンブリに完全な型情報を含める必要があります。そして、たとえDefault.rd.xml
ファイルに<Type Name="Windows.UI.Xaml.Markup.ContentPropertyAttribute" Dynamic="Required All"/>
が含まれていても(理論上はContentPropertyAttribute
のタイプが省略されている可能性があります)、それは役に立ちません。
私は、正確に何が起こっているかについて迷っています。しかし、その間に、ここに動作するあなたの方法のバージョンは次のとおりです。
static string GetContentProperty<TSource>()
{
return typeof(TSource).GetTypeInfo().CustomAttributes
.Where(a => a.AttributeType == typeof(ContentPropertyAttribute))
.FirstOrDefault()?.NamedArguments.Cast<CustomAttributeNamedArgument?>()
.Where(n => n.Value.MemberName == "Name")
.FirstOrDefault()?.TypedValue.Value.ToString();
}
(よりもむしろでType
オブジェクトを渡し、私はちょうどそれが一般的な作られ、方法は、タイプを見つけることの仕事をしましょう。私は、列挙を具体化すること、その長さを検査し、それがだ場合、最初の要素を取得するよりも便利見つけるFirstOrDefault()
を使用できるように上記において)
、Iはnull許容型にCustomAttributeNamedArgument
値型を変換します空ではない。
GetCustomAttributes()
方法は、まだ私はこれは何とかコンパイルUWPアセンブリが破棄が情報を入力することない何かに関係していると思いますしませんが、これはでも動作するという事実。しかし、残念ながら、UWPの特定の分野について、私はどのように言いたいのか分かりません。
私は、上記のことが非常に素晴らしい選択肢ではないことに同意するのは初めてです。属性自体ではなく属性の宣言情報を取得し、そのデータ内のプロパティ名を検索し、最後に型指定されていないvalueプロパティをデータからstring
にキャストしなければならないため、返すことができます理想的ではありません。
しかし、それは動作します。それで、それがあります。 :)
私はタイトルにそれを置く
:)とにかく、私は混乱に – SuperJMN
てみてくださいを避けるために、WPFタグを削除します 'IntrospectionExtensions.GetTypeInfo(タイプ).GetCustomAttribute();私は、誰かが私たちに与えることを願っ' –
Enfyve