Diskuze: Co je zbytečné? (C#)

C# .NET .NET (C# a Visual Basic) Co je zbytečné? (C#) American English version English version

Avatar
jt.e
Člen
Avatar
jt.e:

Zdravím vás.
Chci se zeptat, jestli je například toto nutné:

if(listbox.Items.Count>0)listbox.Items.Clear();

nebo stačí:

listbox.Items.Clear();

(toto je pouze jeden příklad, takovýchto metod je celá řada. Vždycky si říkám mám tam dát to "ověření", nebo je to zbytečné?)
Jak a jestli předem poznám, jestli je nutné provádět tyto kontroly u výchozích komponent a funkcí u Visual Studia? A jak správně psát vlastní kód - tak že budu muset používat kontrolu jako je v prvním případě, nebo tak, že tuto kontrolu budu dávat do metody Clear()?

Editováno 21. února 12:15
 
Odpovědět 21. února 12:14
Avatar
Odpovídá na jt.e
Michal Štěpánek:

Pokud má být vždycky výsledkem vyprázdnění listboxu, pak je ta kontrola zbytečná

Nahoru Odpovědět 21. února 12:25
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na jt.e
Jan Vargovský:

Ověření dávej tam, kde to má smysl. V tomto případě to smysl nemá. Btw, u kolekcí (obzvláště pokud máš na ně referenci jako IEnumerable) stačí zavolat extension metodu Any() místo Count, který ti vždycky projde celou kolekci (hlavně v případu toho IEnumerable, jestli to je nějaký list, tak ten si drží velikost interně jako proměnnou).

 
Nahoru Odpovědět  +1 21. února 14:37
Avatar
jt.e
Člen
Avatar
jt.e:

Díky, rozumím.
A ještě tento příklad pro ověření přístupu k IDisposable objektu:

if (obj != null && !obj.IsDisposed)obj. .. //? pro null je mi jasný

je to tak správně?

Editováno 21. února 18:01
 
Nahoru Odpovědět 21. února 18:00
Avatar
Lako
Člen
Avatar
Odpovídá na jt.e
Lako:

Co se týče zbytečného ověřování, tak se mi často stávalo, že jsem při ověřování null musel psát:

if(NějakáInstanceObjektu != null)
NějakáInstanceObjektu.VolejNějakouMetodu();

C# 6 tohle vyřešil:

NějakáInstanceObjektu?.VolejNějakouMetodu();

(nezavolá se metoda, pokud je to null)
Paráda

 
Nahoru Odpovědět  +2 21. února 19:16
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Jan Vargovský
Marian Benčat:

Jen pro přesnost ...Any() (bez predikatu) si jen řekne o enumerátor a pak jen vraci vysledek operace enumerator.Get­Next(); (který vrátí false pokud se není schopný přesunout dál) a dělá to u všech kolekcí stejně.

 
Nahoru Odpovědět  +1 26. února 0:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.