


Exemple de code simplifié utilisant la réflexion et les fonctionnalités en C#
Supposons qu'il y ait une classe d'étudiant (Étudiant)
{ { name = Age { ; Address { ;
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(); }
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; } }
, 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; }
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(); }
Effectuer la validation :
static void Main(string[] args) { var obj = new Student() { Name = "" }; Console.WriteLine(CheckRequire(obj)); Console.Read(); }
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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

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

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.

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.

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 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 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.
