Обмен технологиями

C# 3 способа получить displayName атрибута

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.