Condivisione della tecnologia

C# 3 modi per ottenere displayName di un attributo

2024-07-08

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


Inserisci qui la descrizione dell'immagine


In C#, è possibile ottenere il displayName di una proprietà in diversi modi, incluso l'uso di attributi, riflessione e LINQ. Di seguito mostrerò ciascun metodo individualmente e fornirò un codice di esempio specifico.

1. Accesso diretto tramite funzionalità

Quando si definisce una proprietà, è possibile utilizzare l'attributo DisplayName per specificare il nome visualizzato della proprietà. Questo metodo è il più semplice e diretto ed è adatto a situazioni in cui è necessario specificare il nome visualizzato durante la progettazione dell'attributo.

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

Nota: in .NET Core l'attributo DisplayName potrebbe essere stato deprecato e potrebbe essere necessario usare DisplayAttribute.

2. Utilizzare il metodo GetCustomAttribute() per ottenerlo tramite la riflessione

Attraverso la riflessione, puoi ottenere dinamicamente attributi personalizzati sugli attributi, incluso 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. Eseguire query utilizzando LINQ

Se si dispone di un elenco di proprietà e si desidera eseguire una query per le proprietà con un nome visualizzato specifico, è possibile utilizzare LINQ per semplificare il processo di query.

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

Riepilogo e confronto

1. Accesso diretto tramite attributi: Il modo più semplice è semplicemente aggiungere l'attributo DisplayName all'attributo. Questo metodo determina già il nome visualizzato quando l'attributo viene definito e non richiede query aggiuntive in fase di esecuzione.

2. Utilizzare il metodo GetCustomAttribute() per ottenere tramite riflessione: Ottenere l'attributo DisplayAttribute sull'attributo tramite la riflessione. Questo metodo ottiene dinamicamente le informazioni sugli attributi in fase di esecuzione ed è più flessibile, ma il sovraccarico in termini di prestazioni è leggermente superiore rispetto all'accesso diretto alle funzionalità.

3. Utilizzare la query LINQ: Eseguire una query su un elenco di proprietà tramite LINQ per trovare proprietà con un nome visualizzato specifico. Questo metodo è adatto per il filtraggio quando è presente un numero elevato di attributi, ma potrebbe essere troppo complesso e non è la scelta migliore per scenari semplici.

Ogni metodo ha i suoi scenari applicabili. Nello sviluppo effettivo, il metodo più appropriato dovrebbe essere selezionato in base a esigenze specifiche e considerazioni sulle prestazioni. Se sono presenti poche proprietà e il nome visualizzato è noto al momento della definizione, l'utilizzo degli attributi rappresenta l'approccio più semplice e diretto. Se è necessario ottenere informazioni sugli attributi in modo dinamico o se sono presenti molti attributi, potrebbe essere più appropriato utilizzare la riflessione o LINQ.