Problem nie występuje u mnie lokalnie, natomiast występuje na jednym serwerze (a na drugim nie). Niestety mam ograniczony dostęp do tego serwera, więc rady w stylu: "Porównaj konfigurację" możemy od razu odłożyć na bok ;)
Jest to API w .NET Core 3.1. Publikacja na serwer to wgranie plików z folderu publish. Publish jest z następującymi ustawieniami:
Configuration: Release - Any CPU
Target Framework: netcoreapp3.1
Deployment Mode: Self-Contained
Target Runtime: win-x64
Z tego co wiem o serwerze to jest to serwer IIS na Windowsie.
Dobra, tyle tytułem wstępu, zanim zaczniecie się zastanawiać, po co ustawienia publikacji podaję, skoro już z tytułu wątku wiadomo, że na pewno obiekt, po którym próbuję iterować, jest nullem ;) Oto kod, który rzuca NullReferenceException:
private List<Link> AdjustItems(string text, List<Link> items)
{
int x = -1;
try
{
x = items.Count;
foreach (var item in items) //-------TUTAJ rzuca NullReferenceException
{
///
}
return items;
}
catch (Exception e)
{
throw new MyException("items.Count: " + x, e);
}
}
Ponieważ NullReferenceException jest rzucany w linii z pętelką, moją pierwszą myślą było, że pewnie items jakimś cudem jest puste. Prześledziłam jednak możliwe ścieżki i nijak mi to nie pasowało. Przede wszystkim - z analizy wynikało mi, że jeśli items byłoby puste, to funkcja wołająca AdjustItems powinna już rzucić wyjątkiem. Dodałam więc sczytywanie items.Count i teraz widzę już wprost, że dzieje się magia - w logach w treści wyjątku wyświetla się:
items.Count: 3
Czyli items nie jest puste, nie jest nullem. Tymbardziej, że po dodaniu linijki x = items.Count
wyjątek wciąż rzucany jest dopiero na linijce z pętlą.
Teraz już powinno być jasne, czemu podaję konfigurację publikacji... Czy zdarzyło się wam, żeby NullReference poszedł z powodu braku deklaracji foreach? :D Czy też sama nie wiem czego. Moje dalsze strzały, to że brakuje czegoś, co jest deklarowane w tej klasie (ale inne metody tej klasy wyjątków nie rzucały...).
Sama teraz zamierzam przepisać pętlę na while, spróbować iterować po innych obiektach, posprawdzam sobie stan atrybutów klasy... Jednak ponieważ problem występuje na serwerze, do którego mam ograniczony dostęp, samo wgrywanie zmian chwilę zajmie... Dlatego piszę z nadzieją, że komuś zdarzyło się coś podobnego ;)