Mon code a une boucle for dans le tableau et une instruction if, et je veux obtenir une seule réponse s'il n'y a pas de correspondance.
else break;
}
Console.WriteLine("No data");
Cependant, j'obtiens ceux-ci: p >
No data No data No data No data
Je ne veux qu'un seul "Pas de données" s'il n'y a pas de correspondance. J'ai essayé d'ajouter
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].GetSomeValue() >= 1 && i].GetSomeValue() <= 5)
Console.WriteLine(arr[i]);
else
Console.WriteLine("No data");
}
Mais cela ne fonctionne pas.
Comment obtenir ce que je veux?
3 Réponses :
// Don't check the no data condition until after the loop
int noData = -1;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].GetSomeValue() >= 1 && arr[i].GetSomeValue() <= 5) {
Console.WriteLine(arr[i]);
noData = 0;
}
}
if (noData == -1) {Console.WriteLine("No data");}
Pourquoi suggérez-vous un int pour une condition vrai / faux? C # a des types booléens!
Le grand avantage de l'utilisation d'un booléen au lieu d'un entier est que l'intention d'un booléen est beaucoup plus claire.
Au moins, il n'a pas déclaré de type d'énumération avec True, False comme noms de membre 😊
@theMayer Je ne le fais que lorsque j'ai besoin d'un drapeau à trois déclarations.
Il serait logique d'avoir un entier si cela comptait le nombre de correspondances. Par exemple. int correspond = 0; ... si (condition) {correspond à ++; ...} ... if (correspond à == 0) Console.WriteLine ("Aucune donnée");
Je suggère d'utiliser un drapeau comme ce code:
bool flag = false ;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].GetSomeValue() >= 1 && arr[i].GetSomeValue() <= 5)
{
Console.WriteLine(arr[i]);
flag=true;
}
}
if(!flag)
{
Console.WriteLine("No data");
}
Deux choses: 1. une variable appelée «drapeau» pourrait être plus descriptive. 2. L'instruction if pourrait être plus propre si la signification de flag était inversée - elle pourrait être écrite comme "if (flag)", évitant ainsi le besoin de l'opérateur logique not.
Alternative basée sur linq:
using System.Linq;
...
var withinSpecs = arr.Where(e => e.GetSomeValue() >= 1 && e.GetSomeValue() < 5).ToArray();
if(withinSpecs.Length == 0)
{
Console.WriteLine("No data");
}
else
{
foreach(var element in withinSpecs)
Console.WriteLine(element);
}
Je voulais en fait utiliser linq car cela me semble très pratique. Mais je ne savais pas comment le mettre en œuvre. Mais merci pour l'idée alternative et aidera mon apprentissage!
Bonjour qoDoq, bienvenue dans stackoverflow, veuillez nous indiquer quelles valeurs sont disponibles dans un tableau
arr []et que faitGetSomeValue ()? est-ce une méthode d'extension ??Que voulez-vous qu'il se passe s'il y a des données dans certains mais pas dans tous?
voulez-vous n'afficher aucune donnée si l'un des éléments ne satisfait pas à la condition. cette question n'est toujours pas claire pour moi ...
Bonjour @PrasadTelkikar an
arr []a cinq arguments avec différents types de données: in, string, enum, decimal, datatime et valeur de retour (int) de la méthode,GetSomeValue () code>. La méthode calcule la différence d'année et renvoie int.@iakobski Je veux obtenir des valeurs du tableau qui correspond à la condition.
Je pense que la réponse de @AkbarAsghari résoudra votre problème
@PrasadTelkikar Oui, je suis désolé pour la question ambiguë, mais votre compréhension est correcte.