Partage de technologie

C# 3 façons d'obtenir le displayName d'un attribut

2024-07-08

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


Insérer la description de l'image ici


En C#, l'obtention du displayName d'une propriété peut être réalisée de différentes manières, notamment à l'aide d'attributs, de réflexion et de LINQ. Ci-dessous, je vais montrer chaque méthode individuellement et fournir un exemple de code spécifique.

1. Accès direct à l'aide des attributs

Lors de la définition d'une propriété, vous pouvez utiliser l'attribut DisplayName pour spécifier le nom d'affichage de la propriété. Cette méthode est la plus simple et la plus directe et convient aux situations où le nom d'affichage doit être spécifié lors de la conception de l'attribut.

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特性已经被附加到属性上

Remarque : Dans .NET Core, l'attribut DisplayName est peut-être obsolète et vous devrez peut-être utiliser DisplayAttribute.

2. Utilisez la méthode GetCustomAttribute() pour l'obtenir par réflexion

Grâce à la réflexion, vous pouvez obtenir dynamiquement des attributs personnalisés sur les attributs, y compris 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. Requête à l'aide de LINQ

Si vous disposez d'une liste de propriétés et souhaitez rechercher des propriétés avec un nom d'affichage spécifique, vous pouvez utiliser LINQ pour simplifier le processus de requête.

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;
    }
}

Résumé et comparaison

1. Accès direct à l'aide des attributs : Le moyen le plus simple consiste simplement à ajouter l'attribut DisplayName à l'attribut. Cette méthode détermine déjà le nom d'affichage lorsque l'attribut est défini et ne nécessite pas de requêtes supplémentaires au moment de l'exécution.

2. Utilisez la méthode GetCustomAttribute() pour obtenir par réflexion : Obtenez l'attribut DisplayAttribute sur l'attribut par réflexion. Cette méthode obtient dynamiquement les informations d'attribut au moment de l'exécution et est plus flexible, mais la surcharge de performances est légèrement supérieure à celle de l'accès direct aux fonctionnalités.

3. Utilisez la requête LINQ : Interrogez une liste de propriétés via LINQ pour rechercher des propriétés avec un nom d'affichage spécifique. Cette méthode convient au filtrage lorsqu'il existe un grand nombre d'attributs, mais elle peut être trop complexe et n'est pas le meilleur choix pour des scénarios simples.

Chaque méthode a ses scénarios applicables. Dans le développement réel, la méthode la plus appropriée doit être sélectionnée en fonction de besoins spécifiques et de considérations de performances. S'il existe peu de propriétés et que le nom d'affichage est connu au moment de la définition, l'utilisation d'attributs constitue l'approche la plus simple et la plus directe. Si vous avez besoin d'obtenir des informations sur les attributs de manière dynamique, ou s'il existe de nombreux attributs, il peut être plus approprié d'utiliser la réflexion ou LINQ.