Je suis nouveau à OOP et C # et j'espère que je manque quelque chose de base ici..je peut probablement utiliser la syntaxe des tuples ici, mais j'essaie d'obtenir ceci pour travailler avec des concepts de base de OOP. J'ai une classe de validateur et Si les entrées ne sont pas correctes, je veux savoir pourquoi il a échoué. Voici ma tentative..Comment obtenir une valeur de chaîne "msg" de Main ()? Avertissement ... Bad code à venir ...
class Validator
{
public int Age { get; set; }
public string Location { get; set; }
public string Msg { get; set; }
public bool IsAgeValid()
{
if (Age < 18)
{
Msg = "Not old enough";
return false;
}
else if (Age > 25)
{
Msg = "you are very old";
return false;
}
else
{
return true;
}
}
public bool IsLocationValid()
{
if (Location == "EARTH")
{
return true;
}
else
{
Msg = "sorry..only for humans";
return false;
}
}
public bool IsValid()
{
if (IsAgeValid() && IsLocationValid())
{
return true;
}
return false;
}
public string getErrorMessage()
{
return Msg;
}
}
static void Main()
{
Validator myValidator = new Validator();
myValidator.Age = 34;
myValidator.Location = "EARTH";
if(myValidator.IsValid())
{
Console.WriteLine("good");
}
else
{
// Not working- myValidator.getErrorMessage()
Console.WriteLine("bad because " + myValidator.getErrorMessage());
}
}
4 Réponses :
On dirait que la seconde si la déclaration s'ils sont entrées, ce qui est redondant si Isvalid retourne un bool. Donnez au code ci-dessous un essai d'essayer de voir si cela fonctionne comme prévu:
if(myValidator.IsValid())
{
Console.WriteLine("good");
}
else
{
Console.WriteLine("bad because " + myValidator.getErrorMessage());
}
Désolé, mon mauvais .. j'ai édité ma question à montrer où j'ai un problème
Votre méthode principale est-elle dans la classe de validateur ou à l'intérieur de la classe de programme?
Créer uniquement une méthode de validation unique et mettre toute la logique de validation dans une méthode unique. Placez une liste de chaîne qui contient tous les messages d'erreur et renvoyez que la liste des erreurs de vérification des erreurs dans la principale s'il s'agit de zéro sans erreur si elle est supérieure, alors zéro Afficher la liste des erreurs de cette façon, vous pouvez afficher plusieurs erreurs à l'utilisateur. . Ou vous pouvez retourner booléen et utiliser la liste de la chaîne comme paramètre réf / Out et remplissez-la avec des erreurs.
Voir l'exemple ci-dessous p>
class Validator
{
public int Age { get; set; }
public string Location { get; set; }
public bool IsValid(ref System.Collections.Generic.List<string> errors)
{
bool isValid = true;
try
{
if (Age < 18)
{
errors.Add("Not old enough");
}
else if (Age > 25)
{
errors.Add("you are very old");
}
if (Location != "EARTH")
{
errors.Add("sorry..only for humans");
}
}
catch (Exception ex)
{
errors.add(ex.Message);
}
IsValid = (errors.Count > 0);
return IsValid;
}
}
static void Main()
{
Validator myValidator = new Validator();
myValidator.Age = 34;
myValidator.Location = "EARTH";
System.Collections.Generic.List errors = new System.Collections.Generic.List<string>();
if (myValidator.IsValid(ref errors))
{
Console.WriteLine("good");
}
else
{
foreach (string error in errors)
{
Console.WriteLine("bad because " + error);
}
}
}
Essayez avec StringBuilder () CODE>: class Validator
{
public int Age { get; set; }
public string Location { get; set; }
public string Msg { get {return sb.ToString();} set; }
private StringBuilder sb = new StringBuilder();
public bool IsAgeValid()
{
if (Age < 18)
{
sb.Append("Not old enough");
return false;
}
else if (Age > 25)
{
sb.Append("you are very old");
return false;
}
else
{
return true;
}
}
public bool IsLocationValid()
{
if (Location == "EARTH")
{
return true;
}
else
{
sb.Append("sorry..only for humans");
return false;
}
}
public bool IsValid()
{
if (IsAgeValid() && IsLocationValid())
{
return true;
}
return false;
}
public string getErrorMessage()
{
return Msg;
}
}
static void Main()
{
Validator myValidator = new Validator();
myValidator.Age = 34;
myValidator.Location = "EARTH";
if(myValidator.IsValid())
{
Console.WriteLine("good");
}
else
{
Console.WriteLine("bad because " + myValidator.getErrorMessage());
}
}
Bienvenue dans le monde de OOP et C #. Après avoir lu votre question et votre commentaire, je pense que votre problème est lié à la manière dont vous devez concevoir les validations de votre application dans votre cas particulier. Comme vous l'avez dit, vous avez une série de validations (au moins 5 validations) à effectuer sur un objet d'une classe, mais vous voulez que la première validation qui ne soit pas remplie, de ne plus continuer avec les autres validations et indiquent lequel était la Validation qui n'a pas été transmise et son message.
Premièrement, vous devez garder à l'esprit que dans OOP, tout est axé sur la classe (contrairement aux autres paradigmes tels que la programmation procédurale ou fonctionnelle). Donc, vous devez modéliser ce concept que vous souhaitez valider dans une classe C #. Comme je le vois dans le code que vous écrivez, c'est un concept qui a l'âge et l'emplacement, ainsi que sur les validations, je peux supposer que c'est un concept semblable à un individu (une personne a un âge et a également un emplacement. de naissance? (Terre, Mars, etc.)). Alors, définissons cette classe en C # comme: p> Ensuite, vous souhaitez avoir un validateur pour cette entité avec certaines conditions qui doivent être remplies. Ces conditions s'appellent également des règles de validation ou des règles commerciales (terminologie utilisée dans la programmation). Les règles commerciales peuvent être générales ou pour un processus particulier de votre candidature (par exemple, une validation de personnes pour un processus d'achat de billets de voyage pour une autre planète, acheter des billets pour un cinéma, etc.). Dans ce cas, je supposerai qu'il s'agit d'une validation générale, nous allons donc modéliser ce "concept de validation" dans une classe, quelque chose comme ceci: p> maintenant, dans OOP Il y a beaucoup de principes, un principe connu est le Responsabilité unique , c'est-à-dire que chaque classe Cela est créé doit être responsable de certaines tâches et ne doit pas s'étendre pour donner d'autres responsabilités différentes de celles conçues dans sa création. Dans cet esprit, la classe General Validator ne devrait être chargée que d'effectuer des validations générales pour l'individu et de signaler les erreurs de validation. Donc, une méthode de validation est définie, qui effectuera la tâche de valider une personne, quelque chose comme ceci: p> Comme vous le voyez, la méthode de validation reçoit un objet individuel, représentant l'individu à valider.
Maintenant, définissons ces séries de validations générales, en considérant: p> En raison de ces considérations, la méthode de validation ne reviendrait plus non modifiée, mais elle pourrait renvoyer une chaîne, contenant la raison de la validation qui n'a pas été remplie. Ainsi, nous pourrions redéfinir cette méthode comme suit: p> Maintenant, dans une application d'exemple de console, nous testerons comment ce validateur serait utilisé: P>
class Program {
static void Main(string[] args) {
var individual = new Individual { Age = 12, Location = "EARTH"};
var validator = new GeneralIndividualValidator();
var result = validator.Validate(individual);
if (result != null) {
Console.WriteLine($"Validation error: {result}");
}
Console.ReadLine();
}
}
Question, voulez-vous connaître une seule validation à la fois ou à toutes les validations qui ne transmettent pas d'objet que vous validez? Cela dépend de votre réponse, comment concevoir votre mécanisme de validation
Très pas clair ce que vous avez du problème avec. Votre question est-elle "Qu'est-ce que la syntaxe d'obtenir la valeur de la propriété en C #"? Assurez-vous également de revoir exemple de reproductible minimal guide Sur le code d'affichage - Si le code ne compile pas (comme un affiché) mais que vous avez un problème avec autre chose, il est très difficile de savoir quel type de réponse aux besoins de la question.
@Marlonchosky - Si au moins une validation échoue, je peux m'arrêter là et vouloir obtenir le message d'erreur à Main () .. J'ai 5 ou 6 autres validations à faire et à quelques entrées de plus
Merci pour l'aide..Je a pu résoudre le problème..soly, je ne pouvais pas donner plus de détails sur l'application réelle et les validations réelles que je fais dans le code réel ..Le code donné dans ma question est un pseudo-code qui Un peu reproduisez la question que j'étais confrontée ... Quoi qu'il en soit, ça marche maintenant..la une nouvelle langue dans cette phase de blocage de ma vie !!!