2012-02-13 4 views
5

Obie te są akceptowane przez kompilator:Czy ToString() jest dobry, zły, czy po prostu zbędny?

ssMinnow = listStrLineElements[VESSEL_TO_AVOID].ToString(); 
ssMinnow = listStrLineElements[VESSEL_TO_AVOID]; 

jest jednym ze sposobów preferowane do drugiego? ToString() lub nie ToString(), to jest pytanie.

+1

jeśli wiesz, że 'listStrLineElements' jest ** zawsze ** ciągiem, nie użyłbym go, nie ma sensu rzutowania na ten sam typ. – Kani

+0

Czy listStrLineElements nie ma typu Lista ? Nazwa sugeruje, że. Jeśli nie, zmień odpowiednio nazwę. – Holystream

+3

Jest to również akceptowane przez kompilator: 'listStrLineElements [VESSEL_TO_AVOID] .ToString(). ToString(). ToString(). ToString();' ale to nie znaczy, że to dobry kod ;-) Jeśli jest już ciągiem znaków, dlaczego wywołać ToString? –

Odpowiedz

7

Jest nie tylko zbędny, ale także niebezpieczny: jeśli listStrLineElements[VESSEL_TO_AVOID] stanie się null, Twoja aplikacja wyrzuci wyjątek, jeśli użyjesz ToString(); bez ToString(), po prostu przypisze null do ssMinnow.

3

Ogólnie rzecz biorąc nie trzeba wywoływać metody ToString(), ponieważ zwracany typ obiektu to już String.

w przykładzie nie możemy powiedzieć, że jako ssMinnow nie pokazuje typ zgłoszenia: Przypuszczam, że użyłeś var słowa kluczowego, które będzie pracować z obu z nich albo już String

1

Wystarczy redundantnego listStrLineElements[VESSEL_TO_AVOID] zwrotów. Wolę opuścić ToString(), gdy nie jest to potrzebne, ale jest to wywołanie oceny.

+0

W jaki sposób jest to wyrok sądowy, wyrok brzmi: "czy napiszę zbędny kod, czy nie", z pewnością istnieje poprawna odpowiedź tutaj. Nie, nie powinieneś pisać niepotrzebnego kodu. –

+0

@Ben W tym sensie, że nie jest niepoprawny, aby go tam zostawić, a niektórzy wolą być wyraźnie, nawet gdy nie są potrzebni. Jak już powiedziałem, zostawiam to, ale niekoniecznie jest to niepoprawne, aby nie robić tego w ten sposób. Zwłaszcza biorąc pod uwagę, że nie wiemy, że jest to ciąg znaków na podstawie podanych informacji, może to być typ danych z definicją niejawnej konwersji. Frazowanie pytania "dobry zły lub zbędny" oznacza również, że osoba pytająca widzi różnicę między czymś, co jest nieprawidłowe lub czymś, co jest złe, niezależnie od tego, czy chcesz to potwierdzić, czy nie. – heisenberg

+0

Nieprawidłowe jest pozostawienie go tam, fakt, że istnieje połączenie z ToString, oznacza, że ​​jest ono potrzebne, kiedy nie jest. To sprawia, że ​​kod jest mniej czytelny, ponieważ inny programista może tracić czas, próbując dowiedzieć się, DLACZEGO ten kod jest obecny, ponieważ wydaje się, że nie służy to żadnemu celowi. Niektóre osoby zdecydowały się na napisanie złego kodu, to nie jest w porządku.Potwierdzam, że istnieje różnica między złym a zbędnym tym, że jest więcej rodzajów złego kodu niż kod nadmiarowy, ale kod nadmiarowy jest zawsze zły. Zauważ, że nie uważam kodu dodanego do celów czytelności za zbędny, służy to celowi. –

4

Jeśli zwróci ciąg, a następnie tak, jest zbędny. jeśli zwraca inny typ, to nie, nie jest zbędny.

0

Nie używaj ToString, jeśli już zwracasz ciąg znaków. Po prostu dodajesz niepotrzebne obciążenie.

0

To nie jest takie proste, jak stwierdzono. Niepotrzebne, być może; dobry lub zły, kwestia opinii. Ponieważ toString() zostanie wywołane w każdym razie, jeśli obiekt jest traktowany gdzieś w łańcuchu, jawne użycie toString() może służyć jako drogowskaz dla programisty czytającego kod. Wywołanie jawne opisuje więcej pierwotnych zamiarów niż pozostawienie go jako założenia do wypełnienia kompilatora.