Как проверить, начинается ли строка с заглавной буквы в запросе LINQ
У меня есть следующий код, я пытаюсь получить строки, которые начинаются с капитала, но я не знаю, как! без linq я могу это сделать, но внутри LINQ ... без понятия!
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;
}
5 ответов
более ранние решения здесь все предполагаем queryValues2
состоит из строк по крайней мере с одним символом в них. Хотя это верно для кода примера, это не обязательно всегда верно.
предположим, вместо этого, у вас есть это:
string[] queryValues2 = new string[5] { "A", "b", "c", "", null };
(что может иметь место, если массив строк передается вызывающим объектом, например).
решение, которое идет прямо на qRes[0]
выдает IndexOutOfRangeException
на ""
и NullReferenceException
на null
.
поэтому более безопасной альтернативой для общего случая было бы использовать это:
where !string.IsNullOrEmpty(qRes) && char.IsUpper(qRes[0])
попробуйте что-то вроде этого (в этом коде arr-это строка[]):
from a in arr
where ((int)a.ToCharArray()[0] >= 65 && (int)a.ToCharArray()[0] <= 90)
select a
суть в том, чтобы проверить, находится ли значение ASCII первого символа в диапазоне заглавных букв или нет.