मैंने आइटम (ईएफ) EntityCollection में आइटम जोड़ने के लिए एक विस्तार विधि लिखा है। मुझे एक दिलचस्प त्रुटि मिली, यह कहकर कि आईनेमेरेबल ("आइटम") का मेरा संग्रह संशोधित किया गया था, फोरच में पहले लूप के बाद। जब मैं वस्तुओं को वस्तुओं में बदल देता हूं .सूची() (नीचे दिए गए कोड में), यह ठीक काम करता है।सी # आईनेमेरेबल रहस्य का संशोधन, मेरे आईनेमरेबल को संशोधित करना क्या है?
मैं पूरी तरह से समझता हूं कि ToList() करना उन वस्तुओं की प्रतिलिपि तैयार करेगा जिन पर foreach तब काम करेगा।
जो मैं समझ नहीं पा रहा हूं वह है कि जब मैं इस पर एक foreach कर रहा हूँ INumerable संशोधित कर रहा है।
अद्यतन: किसी भी तरह, ऐसा लगता है कि आइटम वैरिएबल संग्रह चर के समान है?
अद्यतन 2: मुझे लगता है कि संग्रह और इकाई एफई के इकाई पर नज़र रखने से प्रभावित हो सकता है, लेकिन मैं अभी भी समझने में विफल क्यों
उपयोग:
ssp.ServiceAreas.ReplaceCollection(model.ServiceAreas);
यहाँ मेरी विस्तार विधि है:
public static void AddOrUpdate<TEntity>(this EntityCollection<TEntity> collection, IEnumerable<TEntity> items)
where TEntity : EntityObject, IProjectIdentity<int>, new()
{
foreach (var item in items.ToList())
collection.AddOrUpdate(item);
}
public static void AddOrUpdate<TEntity>(this EntityCollection<TEntity> collection, TEntity item)
where TEntity : EntityObject, IProjectIdentity<int>, new()
{
if (item.ID > 0 && collection.Any(c => c.ID == item.ID))
collection.Remove(collection.First(c => c.ID == item.ID));
// For now, the Remove NEVER gets hit
collection.Add(item);
}
'निकालें' इसे संशोधित करता है, इसलिए जोड़ता है। – vcsjones
@vcsjones हालांकि यह सच है, इस स्थिति में यह इतना आसान नहीं है। –
क्या आपके मामले में 'आइटम == संग्रह' है? –