Not all code path return a value - if i return

Odpowiedz Nowy wątek
2011-08-10 12:36
0

Witam! Mam taki błąd i nie wiem jak temu zapobiec, tzn. pierwsza metoda działa, a druga już wywala błąd. Kod mam taki:

        public Camera Get(int index)
        {
            if ((cameras.Count != 0) && (index >= 0) && (index < cameras.Count))
                return cameras[index];
            else
                return null; // tu działa do cholery
        }
 
        public Camera Get(string name)
        {
            if ((cameras.Count != 0) && (!string.IsNullOrWhiteSpace(name)))
                foreach (Camera camera in cameras)
                {
                    if (camera.Name == name)
                        return camera;
                }
            else
                return null; // tu już ch*** -.-
        }

<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-08-10 12:40
0

Robisz sobie jaja? A jeśli ten warunek:

if ((cameras.Count != 0) && (!string.IsNullOrWhiteSpace(name)))

jest spełniony ale żadna z Camer nie spełnia

if (camera.Name == name)

to co funkcja ma zwrócić?
Przecież ten else z nullem odnosi się tylko (!) to jednego ifa

Tak w ogóle to na moje oko mogłeś po prostu napisać tak:

```csharp
public Camera Get(string name){
    foreach (Camera camera in cameras){
         if (camera.Name == name){
             return camera;
          }
    }
    return null;
}
edytowany 2x, ostatnio: Shalom, 2011-08-10 12:43

Pozostało 580 znaków

2011-08-10 12:46
0

A no fakt :D Nie zauważyłem. A czy tak się poprawnie wykona?

            if ((!string.IsNullOrWhiteSpace(name)))
            {
                foreach (Camera camera in cameras)
                {
                    if (camera.Name == name)
                        return camera;
                }
                return null;
            }
            else
                return null;

<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>
Tak, ale bez sensu zmniejszasz czytelność kodu. - Rev 2011-08-10 12:57
Tzn. dlaczego? W sumie to chyba wystarczy sam foreach i po nim return null, tak? - xeo545x39 2011-08-10 12:59

Pozostało 580 znaków

2011-08-10 13:47
1
Shalom napisał(a)

Tak w ogóle to na moje oko mogłeś po prostu napisać tak:

public Camera Get(string name){
foreach (Camera camera in cameras){
if (camera.Name == name){
return camera;
}
}
return null;
}

Po prostu, to by wyglądało tak:

public Camera Get(string name)
{
    return cameras.SingleOrDefault(q => q.Name == name);
}

;)


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
W c# miałem okazję pisać baaardzo niewiele ;) - Shalom 2011-08-10 13:52
To jest prosta implikacja: pętla + kolekcja => zazwyczaj lepiej użyć LINQ. ;) - somekind 2011-08-10 14:15

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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