Warunek if w kodzie zawraca false, a debuger pokazuje true.

0

Hej.
Temat dotyczy podstaw, dlatego daję wątek do newbie.
Wyjaśni mi ktoś dlaczego nie wchodzi do if'a, poniżej print screen obrazujący debugowanie.
Co ciekawe debuger wskazuje true, ale w momencie przechodzenia do kolejnych kroków kod (patrz poniżej) jest traktowany jako false

           if (str == "")
            {
                return null;
            }

screenshot-20180902001107.png

0

Stringa porownuj przez equals() bo == porownuje referencje

0

Poniżej cała klasa.

    public class GuidHandler : SqlMapper.TypeHandler<Guid?>
    {
        public override void SetValue(IDbDataParameter parameter, Guid? value)
        {
            parameter.Value = value.ToString();
        }

        public override Guid? Parse(Object value)
        {
            String str = value.ToString();
            
            if (str.Equals(""))
            {
                return null;
            }
            
            if (str == "")
            {
                return null;
            }

            if (str.Length == 0)
            {
                return null;
            }

           return  Guid.Parse(str);
        }
    }

Zamieściłem również filmik obrazujący debugowanie.
https://drive.google.com/file/d/11NAdtdezwhQj4xbSGPAJ4__k4Utiu6Kt/view?usp=sharing

0

Zastosuj string.IsNullOrWhitespace() zamiast tych dziwnych ifów.

0
        public override Guid? Parse(Object value)
        {
            var str = value.ToString();
            if (String.IsNullOrWhiteSpace(str))
            {
                return null;
            }

           return Guid.Parse(str);
        }

Nadal nie wchodzi do tego warunku, pomimo tego że debugger pokazuje str = ""

0

Mógłbyś wrzucić Console.WriteLine(str); przed warunkiem oraz w warunku coś innego i za warunkiem również i wrzucić tutaj na forum to co wypisze konsola?

1

zawsze możesz sobie sprawdzić, czy to aby string, jeżeli nie zwróci Ci nula

value as string;
0
        public override Guid? Parse(Object value)
        {
            string str = value.ToString();
            Console.WriteLine("::"+ str +"::");
            Console.WriteLine("::"+ str.Trim() +"::");

           return Guid.Parse(str);
        }

Wynik jest "dziwny", bo taki:

::                ::
::                ::

Już wiadomo dlaczego str.Length zwraca 16...

Dodanie kodu "value as string;", również nie pomogło...

0

A nie przekazujesz ty czasem z tabeli pola typu CHAR, zamiast VARCHAR ?

0

No dobra, a co ty w ogóle wrzucasz do tej metody? ""? I dlaczego obj?

0

Ma to być konwerter danych dla biblioteki Dapper. Biblioteka ta sama przekazuje dane z bazy.
Teraz uwaga, obecnie problem nie rozwiązałem, ale udało mi się go obejść, gdyż w bazie danych zamieniłem wszystkie puste wartości "", na wartość null.
Na tą chwilę jeśli dana nie jest pusta to jest typu string z wartością guid, którą konwertuję na typ Guid i dlatego już nie muszę sprawdzać czy zmienna ma wartość "".

Nie udało się dojść dlaczego jest takie "czary mary", ale na tą chwilę temat udało się rozwiązać w inny sposób.
Wszystkim dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1