Wiem, że to może brzmieć jak bardzo głupie pytanie, ale nie mam na nie odpowiedzi. Jeden z naszych użytkowników zgłosił ostatnio błąd i zdałem sobie sprawę, że stary kod używał != string.Empty
raczej niż IsNullOrEmpty()
. Naprawiłem to za pomocą IsNullOrEmpty()
i teraz działa dobrze, ale chciałbym zrozumieć problem. Problem polega na tym, że ten sam bit kodu działa inaczej na niektórych komputerach. Zasadniczo mam obiekt: context["MODE"]
, który powinien być pusty. Dodałem kilka testów na to, aby się zalogować:Porównywanie ciągów z! = Operator dającym różne wyniki?
contextBuilder.AppendLine("MODE: |" + context["MODE"] + "|");
contextBuilder.AppendLine("MODE != string.Empty: " + (context["MODE"] != string.Empty));
contextBuilder.AppendLine("MODE TRIM != string.Empty: " + (context["MODE"].ToString().Trim() != string.Empty));
contextBuilder.AppendLine("MODE.IsNullOrEmpty: " + string.IsNullOrEmpty(context["MODE"].ToString()));
contextBuilder.AppendLine("MODE.TRIM.IsNullOrEmpty: " + string.IsNullOrEmpty(context["MODE"].ToString().Trim()));
Oto moje logi o tym szczegółów terenowych:
MODE: ||
MODE != string.Empty: False
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
Oto jego kłody:
MODE: ||
MODE != string.Empty: True
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
Jak widać istnieje jedna różnica: MODE != string.Empty
jest Fałszywe dla mnie (ma sens), Prawda dla niego! MODE oczywiście nie jest puste (w przeciwnym razie nie powiodłoby się .ToString()
) Problem został rozwiązany za pomocą IsNullOrEmpty, ale staram się dowiedzieć, dlaczego to nie działa na niektórych komputerach użytkownika, a nie innych. Zazwyczaj z moimi testami niektórzy z nas nie mieli problemów, inni mieli.
Nie bardzo rozumiem, czego mogę się dowiedzieć. Dlaczego jego tryb różni się od wartości null i String.Empty
, ale IsNullOrEmpty
zwraca wartość true? Należy również pamiętać, że przycięcie to w rzeczywistości string.Empty
oraz
Dziękujemy!
'IsNullOrEmpty' faktycznie robi pustą część porównując' Length' 0. – juharr
Spróbuj również drukowanie 'kontekst [„Mode”]. GetType(). Nazwa również. – juharr
Czy możesz podać więcej szczegółów dotyczących pochodzenia wartości w 'kontekście [" MODE "]'? Czy zapewniliście, że wersje .NET są takie same na obu maszynach? –