Сам объект DateTime
является неизменным, но не является эталонным dt . ДТ разрешено изменять, на какой объект DateTime
он указывает. Неизменяемость относится к тому факту, что мы не можем изменять переменные внутри объекта DateTime
.
Например, мы не можем перейти
dt.Day = 3;
dt сама по себе является просто ссылочной переменной, которая указывает на объект DateTime
. По определению допускается варьировать .
Как упоминалось в pst , только для чтения и const , вероятно, ближе к тому, что вы думаете, где вы не можете изменить значение переменная.
Примечание: DateTime является структурой , и, следовательно, имеет тип значения , и меня вводят в заблуждение, вызывая dt
ссылка.' Тем не менее, я думаю, что все еще верно, что dt
по-прежнему является просто переменной, «указывающей» на неизменяемый объект, а сама переменная все еще является изменчивой. Спасибо dan04 за указание на это.
Ответ Скотта великолепен; Я просто хотел бы отметить, что вы действительно можете выполнить этот запрос, используя синтаксис продолжения запроса :
from parent in parents
where parent.Children.Any (c => c.CategoryNumber==1)
select parent into p
from child in p.Children
where child.CategoryNumber == 2
select child
Обратите внимание, как «в» позволяет передать результат одного запроса в следующий запрос . Красиво, а?
Вы можете связать пару запросов вместе, используя SelectMany и Где ].
var selectedChildren = (from p in parents
where p.Children.Any (c => c.CategoryNumber==1)
select p)
.SelectMany(p => p.Children)
.Where(c => c.CategoryNumber == 2);
// or...
var selectedChildren = parents
.Where(p => p.Children.Any(c => c.CategoryNumber == 1))
.SelectMany(p => p.Children)
.Where(c => c.CategoryNumber == 2);