le mie informazioni di contatto
Posta[email protected]
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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.
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;
}
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;
}
}
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.