Κοινή χρήση τεχνολογίας

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.