Как проверить, начинается ли строка с заглавной буквы в запросе 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])

попробуйте это:

where char.IsUpper(qRes[0])

Регистрация Char.IsUpper(qRes[0]).


where Char.IsUpper(qRes.FirstOrdefault())

это то же самое, что и вне LINQ.


попробуйте что-то вроде этого (в этом коде arr-это строка[]):

from a in arr
                    where ((int)a.ToCharArray()[0] >= 65 && (int)a.ToCharArray()[0] <= 90)
                    select a

суть в том, чтобы проверить, находится ли значение ASCII первого символа в диапазоне заглавных букв или нет.