Code: Select all
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>
Hängt das Verhalten des Compilers vom Inhalt der Getotherthing < /code> -Methode ab? Sagen Sie, es sieht so aus (im Moment etwas ähnlich wie bei meinem wirklichen Code): < /p>
public OtherThing GetOtherThing() {
if (this.Category == null) return null;
return this.Category.OtherThings.FirstOrDefault(t => t.Text == this.Text);
}
< /code>
, das wird, abgesehen von sehr schlecht behandelten asynchronen Änderungen an dem, was diese Objekte stammen, auf jeden Fall dasselbe zurück, wenn sie zweimal hintereinander ausgeführt werden. Aber was ist, wenn es so aussah (unsinniges Beispiel für die Argumentation): < /p>
public OtherThing GetOtherThing() {
return new OtherThing {
Id = new Random().Next(100)
};
}
< /code>
Das Ausführen dieser zweimal in einer Zeile würde zur Erstellung von zwei verschiedenen Objekten führen, mit unterschiedlichen IDs aller Wahrscheinlichkeit nach. Was würde der Compiler in diesen Situationen tun? Ist es so ineffizient wie es zu tun, was ich in meiner ersten Auflistung gezeigt habe? Ich habe dieser ersten Code -Auflistung etwas sehr ähnliches ausgeführt und einen Haltepunkt in die Getotherthing