2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
In C# kann das Abrufen des displayName einer Eigenschaft auf verschiedene Arten erfolgen, einschließlich der Verwendung von Attributen, Reflektion und LINQ. Im Folgenden zeige ich jede Methode einzeln und stelle spezifischen Beispielcode bereit.
Beim Definieren einer Eigenschaft können Sie das DisplayName-Attribut verwenden, um den Anzeigenamen der Eigenschaft anzugeben. Diese Methode ist die einfachste und direkteste und eignet sich für Situationen, in denen der Anzeigename beim Entwerfen des Attributs angegeben werden muss.
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特性已经被附加到属性上
Hinweis: In .NET Core ist das DisplayName-Attribut möglicherweise veraltet und Sie müssen möglicherweise DisplayAttribute verwenden.
Durch Reflektion können Sie benutzerdefinierte Attribute für Attribute, einschließlich DisplayAttribute, dynamisch abrufen.
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;
}
Wenn Sie über eine Liste von Eigenschaften verfügen und Eigenschaften mit einem bestimmten Anzeigenamen abfragen möchten, können Sie LINQ verwenden, um den Abfragevorgang zu vereinfachen.
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. Direkter Zugriff über Attribute: Der einfachste Weg besteht darin, einfach das DisplayName-Attribut zum Attribut hinzuzufügen. Diese Methode ermittelt den Anzeigenamen bereits bei der Definition des Attributs und erfordert keine zusätzlichen Abfragen zur Laufzeit.
2. Verwenden Sie die Methode GetCustomAttribute(), um durch Reflektion Folgendes zu erhalten: Erhalten Sie das DisplayAttribute-Attribut für das Attribut durch Reflektion. Diese Methode ruft Attributinformationen dynamisch zur Laufzeit ab und ist flexibler, der Leistungsaufwand ist jedoch etwas höher als beim direkten Zugriff auf Funktionen.
3. Verwenden Sie eine LINQ-Abfrage: Fragen Sie eine Liste von Eigenschaften über LINQ ab, um Eigenschaften mit einem bestimmten Anzeigenamen zu finden. Diese Methode eignet sich zum Filtern bei einer großen Anzahl von Attributen, ist jedoch möglicherweise zu komplex und für einfache Szenarien nicht die beste Wahl.
Jede Methode hat ihre anwendbaren Szenarien. In der tatsächlichen Entwicklung sollte die am besten geeignete Methode basierend auf spezifischen Anforderungen und Leistungsüberlegungen ausgewählt werden. Wenn nur wenige Eigenschaften vorhanden sind und der Anzeigename zum Zeitpunkt der Definition bekannt ist, ist die Verwendung von Attributen der einfachste und unkomplizierteste Ansatz. Wenn Sie Attributinformationen dynamisch abrufen müssen oder viele Attribute vorhanden sind, ist die Verwendung von Reflection oder LINQ möglicherweise besser geeignet.