技術共有

C# 属性の displayName を取得する 3 つの方法

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


ここに画像の説明を挿入します


C# では、プロパティの displayName を取得することは、属性、リフレクション、LINQ の使用など、さまざまな方法で実現できます。以下では、各メソッドを個別に示し、具体的なコード例を示します。

1. 機能を使用した直接アクセス

プロパティを定義するとき、DisplayName 属性を使用してプロパティの表示名を指定できます。この方法は最も単純かつ直接的であり、属性の設計時に表示名を指定する必要がある状況に適しています。

using System;
using System.ComponentModel;

public class MyModel
{
    [DisplayName("Full Name")]
    public string Name { get; set; }
}

// 使用
MyModel model = new MyModel();
string displayName = model.Name.DisplayName; // 假设DisplayName特性已经被附加到属性上

注: .NET Core では、DisplayName 属性が非推奨になっている可能性があるため、DisplayAttribute の使用が必要になる場合があります。

2. GetCustomAttribute() メソッドを使用して、リフレクションを通じて取得します。

リフレクションを通じて、DisplayAttribute などの属性のカスタム属性を動的に取得できます。

using System;
using System.ComponentModel;
using System.Reflection;

public class MyModel
{
    [Display(Name = "Full Name")]
    public string Name { get; set; }
}

// 使用
MyModel model = new MyModel();
string displayName = "";

PropertyInfo propertyInfo = model.GetType().GetProperty("Name");
DisplayAttribute displayAttribute = (DisplayAttribute)propertyInfo.GetCustomAttribute(typeof(DisplayAttribute), false);

if (displayAttribute != null)
{
    displayName = displayAttribute.Name;
}

3. LINQを使用したクエリ

プロパティのリストがあり、特定の表示名を持つプロパティをクエリする場合は、LINQ を使用してクエリ プロセスを簡素化できます。

using System;
using System.ComponentModel;
using System.Linq;
using System.Reflection;

public class MyModel
{
    [Display(Name = "Full Name")]
    public string Name { get; set; }

    [Display(Name = "Date of Birth")]
    public DateTime DateOfBirth { get; set; }
}

// 使用
MyModel model = new MyModel();
string displayName = "";

var attributes = from property in model.GetType().GetProperties()
                 let displayAttribute = Attribute.GetCustomAttribute(property, typeof(DisplayAttribute)) as DisplayAttribute
                 where displayAttribute != null
                 select displayAttribute;

foreach (var attribute in attributes)
{
    if (attribute.Name == "Full Name")
    {
        displayName = attribute.Name;
        break;
    }
}

概要と比較

1. 属性を使用した直接アクセス: 最も簡単な方法は、DisplayName 属性を属性に追加することです。このメソッドは、属性の定義時に表示名をすでに決定しているため、実行時に追加のクエリを必要としません。

2. GetCustomAttribute() メソッドを使用して、リフレクションを通じて取得します。 リフレクションを通じて属性の DisplayAttribute 属性を取得します。この方法は実行時に属性情報を動的に取得するため、より柔軟ですが、機能に直接アクセスするよりもパフォーマンスのオーバーヘッドが若干高くなります。

3. LINQ クエリを使用します。 LINQ 経由でプロパティのリストをクエリし、特定の表示名を持つプロパティを検索します。この方法は、多数の属性がある場合のフィルタリングには適していますが、複雑すぎる可能性があるため、単純なシナリオには最適な選択ではありません。

各方法には、適用可能なシナリオがあります。実際の開発では、特定のニーズとパフォーマンスの考慮事項に基づいて、最も適切な方法を選択する必要があります。プロパティがほとんどなく、表示名が定義時にわかっている場合は、属性を使用するのが最もシンプルで簡単な方法です。属性情報を動的に取得する必要がある場合、または属性が多数ある場合は、リフレクションまたは LINQ を使用する方が適切な場合があります。