LINQ, где () единственные или двойные каналы / амперсанды

Этот статья Википедии имеет пример в C.

А хороший пример - то, что новые модули, записанные для увеличения регистра веб-сервера Apache с основным апачским процессом путем передачи их указатели функции так те функции, призваны обратно для обработки запросов веб-страницы.

6
задан andleer 8 February 2012 в 16:15
поделиться

4 ответа

Вы хотите || / && .

Ну, однотрубный ( | / & ) обычно используется для побитовой арифметики и (среди прочего) может затруднить понимание базы кода; он будет работать в LINQ-to-Objects (поскольку побитовое по-прежнему определено для bool ), но без обычного короткого замыкания. Но если вашим источником данных является база данных (т. Е. В смеси есть синтаксический анализатор выражений), вы можете обнаружить, что он взорвался на вас.


OK; побитовое, возможно, вводило в заблуждение; но || и && остается наиболее логичным и ожидаемым способом выражения ваших намерений. Приношу свои извинения за любую путаницу.

9
ответ дан 8 December 2019 в 17:25
поделиться

Это действительно зависит от ваших предпочтений.

В целом БОЛЬШИНСТВО разработчиков придерживается || и && для всех логических ИЛИ и И особенно , когда они имеют дело с кучей чисел в своем коде, как и вы. Это потому, что это визуально сбивает с толку других разработчиков.

Итак, мое мнение - придерживаться || и && для вашей логической работы и используйте только | и & для ваших побитовых операций.

Опять же, хотя это просто предпочтение.

0
ответ дан 8 December 2019 в 17:25
поделиться

В вашем примере все то же самое. | оператор перегружен для типа bool и совпадает с ||

http://msdn.microsoft.com/en-us/library/kxszd0kx.aspx

Я предпочитаю использовать || потому что люди привыкли к этому, и большинству разработчиков это кажется более естественным.

1
ответ дан 8 December 2019 в 17:25
поделиться

Anyone care to comment on whether we should be using | or || and & or && in our LINQ Where() extensions / queries?

In lambda expressions (such as those frequently used in Linq), these operators act as they normally do in c#. | and & are logical operators while || and && are short-circuiting logical operators. Short circuiting is good if you want efficient code. Short-circuiting is bad if you want to avoid branching code (perhaps to UnitTest with 100% coverage). Most people use short-circuiting all the time and the branching doesn't bother them because they avoid using expressions that have side effects, thus they suffer no ill consequences when some of the expressions are not evaluated.

Here's an example of useful branching by short circuiting:

if (DatabaseIsAvailable() && QueryDataAndThereAreResults())
{
  //do something with Results
}

When DatabaseIsAvailable() is false, QueryDataAndThereAreResults() will not be evaluated.

Any difference with LINQ to SQL?

It doesn't matter which you use for Linq to Sql. The punctuation will be translated into T-Sql's AND and OR operators. After the query is sent to the database, the SqlServer Query Plan Optimizer will figure out whether or not to short circuit.

4
ответ дан 8 December 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: