Maison développement back-end Tutoriel C#.Net Exemple de code simplifié utilisant la réflexion et les fonctionnalités en C#

Exemple de code simplifié utilisant la réflexion et les fonctionnalités en C#

Sep 06, 2017 pm 01:48 PM
.net 简化

Supposons qu'il y ait une classe d'étudiant (Étudiant)


    
 
     
      
         
           {  { name = 
         
          Age { ;  
         
          Address { ;
Copier après la connexion

Si vous devez déterminer si certains champs (attributs) are S'il est vide, qu'il soit supérieur à 0, le code suivant sera disponible :


public static string ValidateStudent(Student student)
        {
            StringBuilder validateMessage = new StringBuilder();            
            if (string.IsNullOrEmpty(student.Name))
            {
                validateMessage.Append("名字不能为空");
            }            if (string.IsNullOrEmpty(student.Sex))
            {
                validateMessage.Append("性别不能为空");
            }            if (student.Age <= 0)
            {
                validateMessage.Append("年龄必填大于0");
            }            
            //...... 几百行            
            // 写到这里发现不对啊,如果必填项有20多个,难道我要一直这样写吗!
            return validateMessage.ToString();
        }
Copier après la connexion

Un tel code n'est pas réutilisable et inefficace.

Nous pouvons utiliser des attributs, une réflexion, puis parcourir les propriétés et vérifier les attributs.

Personnalisez d'abord une classe d'attributs [obligatoire], héritée d'Attribute


    /// <summary>
    /// 【必填】特性,继承自Attribute    /// </summary>
    public sealed class RequireAttribute : Attribute
    {        private bool isRequire;        public bool IsRequire
        {            get { return isRequire; }
        }        /// <summary>
        /// 构造函数        /// </summary>
        /// <param name="isRequire"></param>
        public RequireAttribute(bool isRequire)
        {            this.isRequire = isRequire;
        }
    }
Copier après la connexion

, puis utilisez cet attribut personnalisé pour marquer les membres de la classe d'élèves Attributs :


/// <summary>
    /// 学生类    /// </summary>
    public class Student
    {   
        /// <summary>
        /// 名字        /// </summary>
        private string name;
        [Require(true)]        public string Name
        {            get { return name; }            set { name = value; }
        }        /// <summary>
        /// 年龄        /// </summary>
        [Require(true)]        public int Age { get; set; }        /// <summary>
        /// 地址        /// </summary>
        [Require(false)]        public string Address { get; set; }        /// <summary>
        /// 性别        /// </summary>
        [Require(true)] 
        public string Sex;
    }
Copier après la connexion

Vérifier les attributs d'une classe via les attributs :


  /// <summary>
        /// 检查方法,支持泛型        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="instance"></param>
        /// <returns></returns>
        public static string CheckRequire<T>(T instance)
        {            
        var validateMsg = new StringBuilder();            
        //获取T类的属性
            Type t = typeof (T);            
            var propertyInfos = t.GetProperties();            
            //遍历属性
            foreach (var propertyInfo in propertyInfos)
            {                
            //检查属性是否标记了特性
                RequireAttribute attribute = (RequireAttribute) Attribute.GetCustomAttribute(propertyInfo, typeof (RequireAttribute));                
                //没标记,直接跳过
                if (attribute == null)
                {                    
                continue;
                }                
                //获取属性的数据类型
                var type = propertyInfo.PropertyType.ToString().ToLower();                
                //获取该属性的值
                var value = propertyInfo.GetValue(instance);                
                if (type.Contains("system.string"))
                {                    
                if (string.IsNullOrEmpty((string) value) && attribute.IsRequire)
                        validateMsg.Append(propertyInfo.Name).Append("不能为空").Append(",");
                }                
                else if (type.Contains("system.int"))
                {                    
                if ((int) value == 0 && attribute.IsRequire)
                        validateMsg.Append(propertyInfo.Name).Append("必须大于0").Append(",");
                }
            }            return validateMsg.ToString();
        }
Copier après la connexion

Effectuer la validation :


static void Main(string[] args)
        {            var obj = new Student()
            {
                Name = ""
            };
            Console.WriteLine(CheckRequire(obj));
            Console.Read();
        }
Copier après la connexion

Résultat :

Quelqu'un découvrira que le sexe est également marqué de [Require(true)] , pourquoi Il n'y a aucune information de vérification. C'est parce que Sex n'implémente pas les propriétés {get; set; et GetProperties ne peut pas être obtenu

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les perspectives d'emploi du C# ? Quelles sont les perspectives d'emploi du C# ? Oct 19, 2023 am 11:02 AM

Que vous soyez débutant ou professionnel expérimenté, la maîtrise du C# ouvrira la voie à votre carrière.

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM May 06, 2024 pm 04:43 PM

Le développement des technologies d’intelligence artificielle (IA) bat son plein aujourd’hui et elles ont montré un grand potentiel et une grande influence dans divers domaines. Aujourd'hui, Dayao partagera avec vous 4 cadres de projets liés au modèle d'IA open source .NET LLM, dans l'espoir de vous fournir une référence. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel est un kit de développement logiciel (SDK) open source conçu pour intégrer de grands modèles de langage (LLM) tels qu'OpenAI, Azure

Convertir numpy en liste : une stratégie efficace pour simplifier le processus de traitement des données Convertir numpy en liste : une stratégie efficace pour simplifier le processus de traitement des données Jan 19, 2024 am 10:47 AM

NumPy est une bibliothèque très utile et largement utilisée dans les applications de traitement de données et d'apprentissage automatique. Une caractéristique importante de NumPy est qu'il fournit un grand nombre de fonctions d'outils pour les opérations mathématiques sur les tableaux et les matrices en Python, ce qui fait de NumPy un outil important dans le domaine du calcul scientifique. Cependant, dans de nombreux cas, nous devons convertir les tableaux NumPy en listes Python (ou autres types de données similaires) pour une meilleure utilisation dans notre code. Bien que les tableaux NumPy soient à bien des égards meilleurs que P

Technologie d'optimisation des performances .NET pour les développeurs Technologie d'optimisation des performances .NET pour les développeurs Sep 12, 2023 am 10:43 AM

Si vous êtes un développeur .NET, vous devez être conscient de l'importance d'optimiser les fonctionnalités et les performances pour fournir des logiciels de haute qualité. En utilisant de manière experte les ressources fournies et en réduisant les temps de chargement des sites Web, vous créez non seulement une expérience agréable pour vos utilisateurs, mais vous réduisez également les coûts d'infrastructure.

Différences de performances entre le framework Java et le framework .NET Différences de performances entre le framework Java et le framework .NET Jun 03, 2024 am 09:19 AM

En termes de traitement des requêtes à haute concurrence, .NETASP.NETCoreWebAPI fonctionne mieux que JavaSpringMVC. Les raisons incluent : la compilation précoce AOT, qui réduit le temps de démarrage, une gestion plus raffinée de la mémoire, où les développeurs sont responsables de l'allocation et de la libération de la mémoire des objets.

Fonctions fléchées PHP : comment simplifier le traitement des boucles Fonctions fléchées PHP : comment simplifier le traitement des boucles Sep 13, 2023 am 08:15 AM

Fonction flèche PHP : comment simplifier le traitement des boucles, nécessite des exemples de code spécifiques Introduction : Avec la sortie de PHP7.4, les fonctions fléchées sont devenues une nouvelle fonctionnalité très intéressante en PHP. L’émergence des fonctions fléchées nous rend plus concis et plus pratique lorsqu’il s’agit de boucles. Cet article présentera la syntaxe de base des fonctions fléchées et comment utiliser les fonctions fléchées pour simplifier le traitement des boucles, et donnera des exemples de code spécifiques. La syntaxe de base des fonctions fléchées La syntaxe des fonctions fléchées est très simple et peut être considérée comme un raccourci pour écrire des fonctions anonymes. sa structure grammaticale

Opérateur Null Coalesce en PHP7 : Comment simplifier le jugement conditionnel du code ? Opérateur Null Coalesce en PHP7 : Comment simplifier le jugement conditionnel du code ? Oct 20, 2023 am 09:18 AM

Opérateur NullCoalesce en PHP7 : Comment simplifier le jugement conditionnel du code ? Au cours du processus de développement, nous devons souvent effectuer des jugements conditionnels sur des variables pour déterminer si elles ont une valeur ou si elles sont nulles. La méthode traditionnelle consiste à utiliser des instructions if ou des opérateurs ternaires pour effectuer des jugements conditionnels, mais cette façon d'écrire semble longue et compliquée dans certains cas. Heureusement, l'opérateur NullCoalesce (??) a été introduit dans PHP7, ce qui peut nous aider à simplifier la façon dont nous écrivons du code et à améliorer l'efficacité du développement. N

C # .NET des questions et réponses d'entrevue: améliorez votre expertise C # .NET des questions et réponses d'entrevue: améliorez votre expertise Apr 07, 2025 am 12:01 AM

C # .NET Les questions et réponses d'entrevue comprennent les connaissances de base, les concepts de base et l'utilisation avancée. 1) Connaissances de base: C # est un langage orienté objet développé par Microsoft et est principalement utilisé dans le framework .NET. 2) Concepts de base: la délégation et les événements permettent des méthodes de liaison dynamiques, et LINQ fournit des fonctions de requête puissantes. 3) Utilisation avancée: la programmation asynchrone améliore la réactivité et les arbres d'expression sont utilisés pour la construction de code dynamique.

See all articles