Berbagi teknologi

C# 3 cara untuk mendapatkan displayName suatu atribut

2024-07-08

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


Masukkan deskripsi gambar di sini


Di C#, mendapatkan displayName properti dapat dilakukan dengan berbagai cara, termasuk menggunakan atribut, refleksi, dan LINQ. Di bawah ini saya akan menunjukkan setiap metode satu per satu dan memberikan contoh kode spesifik.

1. Akses langsung menggunakan fitur

Saat mendefinisikan properti, Anda dapat menggunakan atribut DisplayName untuk menentukan nama tampilan properti. Metode ini adalah yang paling sederhana dan langsung, serta cocok untuk situasi di mana nama tampilan perlu ditentukan saat atribut dirancang.

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

Catatan: Di .NET Core, atribut DisplayName mungkin sudah tidak digunakan lagi dan Anda mungkin perlu menggunakan DisplayAttribute.

2. Gunakan metode GetCustomAttribute() untuk mendapatkannya melalui refleksi

Melalui refleksi, Anda dapat secara dinamis memperoleh atribut khusus pada atribut, termasuk 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. Kueri menggunakan LINQ

Jika Anda memiliki daftar properti dan ingin menanyakan properti dengan nama tampilan tertentu, Anda bisa menggunakan LINQ untuk menyederhanakan proses kueri.

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

Ringkasan dan perbandingan

1. Akses langsung menggunakan atribut: Cara paling sederhana adalah dengan menambahkan atribut DisplayName ke atribut tersebut. Metode ini sudah menentukan nama tampilan saat atribut ditentukan, dan tidak memerlukan kueri tambahan saat runtime.

2. Gunakan metode GetCustomAttribute() untuk memperoleh melalui refleksi: Dapatkan atribut DisplayAttribute pada atribut melalui refleksi. Metode ini secara dinamis memperoleh informasi atribut saat runtime, yang lebih fleksibel, namun overhead kinerjanya sedikit lebih tinggi daripada mengakses fitur secara langsung.

3. Gunakan kueri LINQ: Kueri daftar properti melalui LINQ untuk menemukan properti dengan nama tampilan tertentu. Metode ini cocok untuk memfilter ketika terdapat banyak atribut, namun mungkin terlalu rumit dan bukan pilihan terbaik untuk skenario sederhana.

Setiap metode memiliki skenario yang dapat diterapkan. Dalam pengembangan sebenarnya, metode yang paling tepat harus dipilih berdasarkan kebutuhan spesifik dan pertimbangan kinerja. Jika hanya ada sedikit properti dan nama tampilan diketahui pada waktu definisi, penggunaan atribut adalah pendekatan yang paling sederhana dan mudah. Jika Anda perlu memperoleh informasi atribut secara dinamis, atau terdapat banyak atribut, mungkin lebih tepat menggunakan refleksi atau LINQ.