Оба [expr.pos]/1
и [expr.ass]/6
согласны с тем, что целочисленное переполнение битового поля (со знаком или без знака) определяется реализацией.
[expr.pos]/1
[...] Если операндом является битовое поле, которое не может представлять увеличенное значение, результирующее значение битового поля равно от реализации.
[expr.ass]/6
Когда левый операнд оператора присваивания является битовым полем, которое не может представлять значение выражения, результирующее значение битового поля является реализацией -определенной.
blockquote>Я исправил страницу cppreference. Спасибо, что заметили.
Brandon, это - нормальная ошибка при использовании LINQ. Посмотрите, IQueryable, возвращенный из LINQ, на самом деле не содержит Ваши объекты, вот почему Вы не можете индексировать в него. Это имеет только достаточно информации для выполнения запроса, когда Вы на самом деле просите объекты. Это называют "задержанным выполнением", потому что запрос не выполняется когда Вы select
, но позже, когда Вы перечисляете результаты. Можно искать "linq задержанное выполнение" и найти много людей, пытающихся объяснить, как оно работает.
Когда Вы делаете Ваш foreach
, запрос работает, и Вы называете fixData () на каждом объекте, как Вы предназначили. Однако при доступе к IQueryable снова Вы выполните запрос во второй раз, и (в зависимости от поставщика LINQ, которого Вы используете), Вы могли бы, вводя исходные неизмененные объекты во второй раз.
Путем вызова ToList () на IQueryable, Вы создаете Список в оперативной памяти со всеми результатами запроса. Можно теперь индексировать в этот список и получить доступ ко всему этому, Вы хотите, не выполняя запрос снова. Если Вы, соглашаются с наличием всех объектов в памяти (небольшой набор результатов), то использование ToList () может быть хорошим решением для Вас.
@PaulG, Вы правы, что он может использовать foreach
вместо for
, но он должен сохранить ссылку на список, или иначе он прав, где он запустил (с IQueryable).
var items = goodWords.ToList();
foreach (var item in items)
{
item.fixData();
}
Я полагаю, что Ваш goodWords IQueryable<CWords>
ввести?
Итак, почему бы не любить это?
foreach (CWords item in goodWords.ToList())
{
item.fixData();
}