J'ai le code suivant, j'essaie d'obtenir les cordes qui commence par le capital, mais je ne sais pas comment! Sans Linq, je peux le faire mais à l'intérieur de Linq ... aucune idée!
string[] queryValues1 = new string[10] {"zero", "one", "two", "three", "four", "five", "six", "seven","nine", "ten" };
string[] queryValues2 = new string[3] { "A", "b", "c" };
var queryResult =
from qResult in queryValues1
from qRes in queryValues2
where qResult.Length > 3
where qResult.Length < 5
where qRes[0].StartWithCapital //how to check if qRes started with a capital letter?
select qResult + "\t" + qRes + Environment.NewLine;
foreach (var qResult in queryResult)
{
textBox1.Text += qResult;
}
6 Réponses :
vérifier char.isupper (QRES [0]) code>. p>
C'est un [0] code> trop nombreux, je pense: qres code> est une chaîne code> code>, donc qres [0] code> est Déjà le Char code> dont vous avez besoin. Notez qu'il provoquera une exception si elle sera appelée sur une chaîne vide, alors que je envisagerais que le test "commence par une lettre majuscule" soit un test valide qui devrait renvoyer false.
HMM I GOT GOT ne peut pas appliquer d'indexation avec [] à une expression de type 'char' code> quand j'ai essayé de faire `var queryresult = de qresult à QueryValues1 de QRES à QueryValues2 Où QResult.length> 3 où QResult. Longueur <5 Où Char.isupper (QRES [0] [0]) Sélectionnez Nouveau {QRESULT, QRES}; `
@HVD: Tu as raison; Je pensais que son QRES [0] code> était une chaîne.
where Char.IsUpper(qRes.FirstOrdefault()) It is the same as outside LINQ.
QRES [0] CODE> est un seul caractère (pas un iNeumable), cette ligne de code n'est donc pas syntaxiquement correcte.
Strange je l'ai modifié en fait parce que j'ai vu une autre réponse Utilisez QRES [0] [0] pour le personnage. Le changer
Essayez ceci:
where char.IsUpper(qRes[0])
Essayez quelque chose comme ceci (dans ce code arr s'agit d'une chaîne []): Le gist est de vérifier si la valeur ASCII du premier caractère réside dans la gamme de lettres majuscules ou non. . p> p>
Les solutions précédentes ici assument tous Supposons que vous avez ceci: p> (ce qui pourrait être le cas si Le tableau de chaîne est transmis par un appelant, par exemple). p> une solution qui va droit pour Par conséquent, une alternative plus sûre pour le cas général serait de Utilisez ceci: p> QueryValues2 code> se compose de chaînes avec au moins un caractère en eux. Bien que cela soit vrai du code exemple, ce n'est pas nécessairement toujours vrai. qres [0] code> augmentera un indexautofrangeeexception code> sur le "" code> et un nullreferenceException code> sur le null code>. p> where !string.IsNullOrEmpty(qRes) && char.IsUpper(qRes[0])
Juste pour indiquer l'évidence, toutes les solutions précédentes visaient à l'exemple de code présenté et que la vérification des erreurs est laissée à la commande (sinon toutes nos réponses devraient avoir un "Vous devez faire xy et z pour erreur Vérification " i> Disclaimer). Votre réponse est correcte, mais explique explicitement ce que tout le monde s'appuie implicitement sur le PO à prendre en charge.
@slugster qui suppose NULL ou une chaîne vide est une entrée invalide. S'il s'agit d'une entrée valide et que la réponse ne s'adresse pas, la réponse est incomplète. Sinon, nous pourrions aussi répondre avec où qres == "A" code>, qui sera vrai pour toutes les chaînes de l'exemple qui commencent par une lettre majuscule.
static void Main(string[] args)
{
Console.Write("\nLINQ : Find the uppercase words in a string : ");
Console.Write("\n----------------------------------------------\n");
string strNew;
Console.Write("Input the string : ");
strNew = Console.ReadLine();
//string[] newStr = strNew.Split(' ');
var ucWord = WordFilt(strNew);
Console.Write("\nThe UPPER CASE words are :\n ");
foreach (string strRet in ucWord)
{
Console.WriteLine(strRet);
}
Console.ReadLine();
}
static IEnumerable<string> WordFilt(string mystr)
{
var upWord = mystr.Split(' ')
.Where(x=> !string.IsNullOrEmpty(x) && char.IsUpper(x[0]));
return upWord;
}