Встроенный оператор if внутри цикла foreach - PullRequest
0 голосов
/ 29 января 2020

Есть ли какой-нибудь способ сделать что-то подобное без использования обычного синтаксиса If?

foreach (var cell in ws.Cells[header_row, 1, header_row, ws.Dimension.End.Column])
{
    cell.Address == "SomeValue" ? break : continue;
}

Кажется, Visual Studio не допускает встроенное выражение If с такими результатами.

Что я делаю не так? Или это на самом деле невозможно?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 29 января 2020
if(cell.Address == "SomeValue") break;

В вашем примере кода продолжить не нужно.

2 голосов
/ 29 января 2020

Вы можете использовать LINQ TakeWhile для получения желаемого поведения:

foreach (var cell in ws.Cells[header_row, 1, header_row, ws.Dimension.End.Column].TakeWhile(x => x.Address != "SomeValue"))
{

}
1 голос
/ 29 января 2020

То, что вы делаете с ?, не является встроенным оператором if, этот оператор называется условным оператором (иногда его также называют троичным оператором, но не путайте его с оператором Элвиса ).

Как вы можете прочитать из документации Microsoft, вы не используете его для управления потоком вашего приложения, но как сокращение для условно назначить что-то. Таким образом, троичный оператор должен либо вернуть значение, либо выдать исключение.

Перепишите ваш код следующим образом:

if (cell.Address == "SomeValue")
    break;

Обратите внимание, как я пропустил continue; оператор, так как он не нужен в вашем случае, так как оператор continue переходит к следующей итерации без завершения этой итерации (что, я полагаю, вам здесь не нужно)

Вот краткий пример того, как использовать троичный:

// Instead of this:
if (foo)
    bar = "Foo";
else
    bar = "Not Foo";

// You can write this
bar = foo ? "Foo" : "Not Foo";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...