Dlaczego powinienem używać var zamiast typu? [duplikat]

Możliwy duplikat:
ReSharper i var

Po zainstalowaniu ReSharper wymaga (poprzez ostrzeżenia), aby używać var w miarę możliwości, na przykład

UnhandledExceptionEventArgs ue = (UnhandledExceptionEventArgs) t;

ReSharper chce przekształcić go w

var ue = (UnhandledExceptionEventArgs) t;

Pierwsza wersja mi się bardziej podoba, czy jest jakiś powód, aby preferować var ? lepsza wydajność? cokolwiek? czy to tylko styl kodu?

Author: Community, 2011-02-02

4 answers

To tak naprawdę tylko styl kodowania. Kompilator generuje dokładnie to samo dla obu wariantów.

Zobacz także tutaj Pytanie o wydajność:

 91
Author: Martin Buberl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:31

Kiedy mówisz "przez ostrzeżenia" co dokładnie masz na myśli? Zwykle widziałem, że daje to wskazówkę, że może chcesz użyć var, ale nic tak ostrego jak Ostrzeżenie.

Nie ma różnicy w wydajności var - kod jest kompilowany do tego samego IL. Potencjalną korzyścią jest czytelność-jeśli już uczyniłeś typ zmiennej krystalicznie czystym na RHS przypisania (np. poprzez wywołanie cast lub konstruktora), gdzie jest korzyść z posiadania jej również na LHS? To jest osobiste preferencje.

Jeśli nie chcesz, aby R# sugerowało użycie var, po prostu zmień opcje. Jedna rzecz o ReSharper: to jest Bardzo konfigurowalne:)

 31
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-01 22:07:21

W w tym przypadku jest to po prostu styl kodowania.

Użycie var jest konieczne tylko w przypadku typów anonimowych.
W innych sytuacjach to kwestia gustu.

 12
Author: Henk Holterman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-01 22:15:00

Jak powiedzieli inni, nie ma różnicy w skompilowanym kodzie (IL), gdy używasz jednego z poniższych:

var x1 = new object();
object x2 = new object;

Przypuszczam, że Resharper ostrzega, ponieważ [moim zdaniem] łatwiej jest przeczytać pierwszy przykład niż drugi. Poza tym, po co powtarzać nazwę typu dwa razy?

Rozważ następujące rzeczy, a zrozumiesz, co mam na myśli:

KeyValuePair<string, KeyValuePair<string, int>> y1 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5));

Jest o wiele łatwiej to przeczytać:

var y2 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5));
 11
Author: Alex Essilfie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-01 22:15:57