Ci sono due domande interessanti racchiuse in una qui.
In primo luogo, è meglio suddividere espressioni più complesse in più semplici e forse cogliere l'opportunità di dare le variabili ai nomi utili?
Questa è spesso una buona idea, ma in questo caso il codice potrebbe essere meglio letto come:
var wanted_items = lstItem.Where(item => stock.ItemCode == item.ItemCode);
foreach (var item in wanted_items)
In secondo luogo, ci sono problemi di prestazioni nella rottura di espressioni come questa?
Non è così facile rispondere, nel caso generale. Nella maggior parte dei linguaggi, un costrutto di questo tipo porterebbe a tutti gli elementi dell'elenco in elaborazione per filtrare quelli richiesti, quindi i singoli elementi elaborati di nuovo per applicare l'assegnazione. Se c'è una sola corrispondenza, la prima passerà (in media) a esaminare il doppio degli elementi necessari.
Ma questo è C # e Linq, quindi ora l'elenco sarà un iteratore o sarà tradotto in SQL, entrambi i quali ottimizzano l'elaborazione, in misura maggiore o minore. In questo caso particolare la performance sarà (dovrebbe essere) esattamente la stessa sia che l'espressione sia divisa o meno, ma ci sono costrutti strettamente correlati in cui la divisione dell'espressione come questa può cristallizzare un particolare percorso per l'esecuzione e avere un impatto prestazionale piuttosto grave.
In definitiva, dovresti sempre scrivere il codice più leggibile possibile usando i migliori algoritmi possibili e il miglior uso possibile delle librerie di base sottostanti. Se si hanno preoccupazioni per le prestazioni, è necessario valutare e misurare prima ancora di pensare di modificare il codice.