[解決済み】Reflection - プロパティで属性名と値を取得する
2022-03-28 21:38:52
質問
Nameというプロパティを持つBookと呼ばれるクラスがあります。このプロパティには、属性が関連付けられています。
public class Book
{
[Author("AuthorName")]
public string Name
{
get; private set;
}
}
メインメソッドでは、リフレクションを使って、各プロパティの各属性のキーと値のペアを取得したいと考えています。つまり、この例では、属性名として "Author"、属性値として "AuthorName" を期待することになりますね。
質問です。Reflectionを使用して、プロパティの属性名と値を取得するにはどうすればよいですか?
どのように解決するのですか?
使用方法
typeof(Book).GetProperties()
の配列を取得します。
PropertyInfo
のインスタンスを作成します。 次に
GetCustomAttributes()
をそれぞれの
PropertyInfo
を持つものがあるかどうかを確認します。
Author
属性タイプです。 もしそうであれば、プロパティ情報からプロパティ名を、属性から属性値を取得することができます。
特定の属性タイプを持つプロパティをスキャンし、データをディクショナリで返す、といった内容です(ルーチンにタイプを渡すことで、よりダイナミックにできることに注意してください)。
public static Dictionary<string, string> GetAuthors()
{
Dictionary<string, string> _dict = new Dictionary<string, string>();
PropertyInfo[] props = typeof(Book).GetProperties();
foreach (PropertyInfo prop in props)
{
object[] attrs = prop.GetCustomAttributes(true);
foreach (object attr in attrs)
{
AuthorAttribute authAttr = attr as AuthorAttribute;
if (authAttr != null)
{
string propName = prop.Name;
string auth = authAttr.Name;
_dict.Add(propName, auth);
}
}
}
return _dict;
}
関連
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
-
[解決済み] 文字列値によるリフレクションでプロパティを設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】DbSetを使用しない生のSQLクエリ - Entity Framework Core