Widziałem dziwne trochę zachowania w niektórych kod C#, że nie jestem w stanie wyjaśnić. Możliwe, że brakuje mi ważnej wiedzy, więc mam nadzieję, że ktoś może włączyć światło dla mnie.C# nie można ustawić właściwość wewnątrz IEnumerable
Got blok kodu, który wygląda tak:
IEnumberable<myObject> objects = GetObjectsFromApiCall();
for (int i = 0; i < objects.Count(); i++)
{
if (String.IsNullOrEmpty(objects.ElementAt(i).SubObject.Title))
{
SubObject sub = GetSubObjectFromDatabase((long)objects.ElementAt(i).SubObject.Id);
if (sub != null)
{
objects.ElementAt(i).SubObject.Title = sub.Title;
}
}
}
Kiedy krok przez to wszystko, co na temat tego kodu wydaje się działać poprawnie. Kolekcja "obiektów" jest zapełniana zgodnie z oczekiwaniami. "pod" jest pobierane jako zebrane i ma pełny zestaw oczekiwanych właściwości, w tym wypełnioną właściwość tytułu. Podczas wykonywania nie są zgłaszane żadne błędy.
Ale ... właściwość SubObject.Title (która ma tylko standard get, set; code), która istnieje w każdym obiekcie uparcie pozostaje pusta.
Brakuje mi. Ktoś wyjaśnia, co się dzieje?
EDYCJA: Dla tych, którzy zasugerowali, że nie powinienem używać pętli for i ElementAt, zacząłem od pętli foreach, ale pomyślałem, że to może być źródłem problemu, ponieważ za każdym razem pobierało nowe SubObject. Naprawiono teraz, dzięki twojej pomocy i ForEachowi przywrócono.
Cheers, Matt
Gotowe: [Aktualizowanie właściwości elementu w ramach opcji IEnumerable, ale właściwość nie pozostaje ustawiona?] (Http://stackoverflow.com/a/9104212/93732) –
Ten kod może być tak powolny, nawet nie jest zabawne. – ChaosPandion
Czy możesz skopiować/wkleić * aktualny * kod, który posiadasz, a nie coś, co * wygląda * jak * rzeczywisty * kod? – ken2k