Код: Выделить всё
var newList = oldList.Select(x => new Thing {
FullName = String.Format("{0} {1}", x.FirstName, x.LastName),
OtherThingId = x.GetOtherThing() != null : x.GetOtherThing().Id : 0 // Might call x.GetOtherThing() twice?
});
< /code>
зависит ли поведение компилятора от содержимого метода getotherthing < /code>? Скажем, это выглядит так (в некоторой степени похоже на мой настоящий код прямо сейчас): < /p>
public OtherThing GetOtherThing() {
if (this.Category == null) return null;
return this.Category.OtherThings.FirstOrDefault(t => t.Text == this.Text);
}
< /code>
это будет, за исключением очень плохо обработанных асинхронных изменений в любом хранилище, из которого поступают эти объекты, определенно верните одно и то же, если запустить дважды подряд. Но что, если это выглядело так (бессмысленный пример ради аргумента): < /p>
public OtherThing GetOtherThing() {
return new OtherThing {
Id = new Random().Next(100)
};
}
< /code>
Запуск этого дважды подряд приведет к созданию двух разных объектов, с разными идентификаторами по всей вероятности. Что будет делать компилятор в этих ситуациях? Это так же неэффективно, как кажется, это то, что я показал в своем первом списке? Я запустил что -то очень похожее на этот первый список кодов и поместил точку останова в методе экземпляра GetOtherThing
Подробнее здесь: https://stackoverflow.com/questions/218 ... -this-code