Problem z var

0

Witam,

chciałem pobawić się LINQ. Niestety mam problem ze słowem 'var', a właściwie z tym, że mój Visual Studio 2010 Express go nie rozpoznaje. Nie mam go w IntelliSense, a debugger rzuca ostrzeżeniami, że nie zna "var" i nie koloruje go jak, zdaje się, powinien. Według MSDN 'var' C# występuje standardowo. Myślałem, że problemem jest brakująca biblioteka, ale wydaje się, że nie trzeba niczego dodatkowo dopisywać. Sprawdziłem, że kompilator jest ustawiony pod .Net 4. Zmianiłem dla próby na .Net 3.5, ale nie pomogło. Czy ktoś spotkał się z podobnym problemem?

0

Proste pytanie - po co ci "var"?

0

Do LINQ-u i dlatego, że powinien według M. w Visual-u być, a go nie ma. czytałem obie MSDN o LINQ-u i się to wyrażenie często pojawia, więc chciałem je wykorzytać a tu nie mogę. Rozumiem niechęć do takiego tworu, ale o ile dobrze wiem ( a jestem noobkiem, więc za dużo nie wymagajcie) niektórych query bez var się nie da zrobić(popraw mnie, ale Enumerable nie zawsze się da użyć).

1

var możesz używać tylko dla zmiennych lokalnych i jedynie w połączeniu z jednoczesną inicjalizacją.
np.

		public AccessModelList GetProducts(List<Access> accesses, long userId)
		{
			var sw = new System.Diagnostics.Stopwatch(); sw.Start();
			var accessIds = accesses.Select(a => a.Id).ToList();

			// ...
			var sessions = from Sessions in db.Sessions
				where ids.Contains(sessions.Id)
				group Sessions by Sessions.Id
				into sessionGroups
				select new ElementCountPerIdModel() { Id = sessionGroups.Key.Value, Count = sessionGroups.Count()};

			var result = sessions.Take(ids.Count).ToList();
			// ...

		}
1

var (odpowiednik auto) dobiera domyślny typ.

Ten typ musi egzystować, tak więc ZAWSZE da się ominąć var.

0

Sory za błędy, już mam konto i będę edytował ;p

0

Tfu domyślne.
Dobierane według kontekstu użycia.

0
ŁF napisał(a):

var możesz używać tylko dla zmiennych lokalnych i jedynie w połączeniu z jednoczesną inicjalizacją.

Dzięki :) o to mi chodziło

1
spartanPAGE napisał(a):

Ten typ musi egzystować, tak więc ZAWSZE da się ominąć var.

nie zawsze, nie ominiesz typu anonimowego (select new { ... }). po co chcesz deklarować typ zmiennej lokalnej, jeśli można tego nie robić? przecież to kosztuje czas, jest monotonne i nie zwiększa przejrzystości kodu. wręcz ją zmniejsza, bo wydłuża kod, zwłaszcza, jeśli masz długie nazwy typów i do tego używasz generyków, chowając to, co istotne, czyli algorytm.

0

Jeśli masz długie nazwy, to działasz na przestrzeni nazw.

Czy zmniejsza czytelność kodu? Dla mnie łatwiej jest spojrzeć na "ten konkretny typ", niż domyślać się, jaki podłożyło.

0

var działa od Visuala 2008 wzwyż, a minimalna wersja Frameworka to 2.0

0

@up, czyli wcześniej jakoś sobie bez tego dawano radę.

0

No tak, ale wtedy nie było LINQ :-)
Ale oczywiście, da się używać LINQ bez var. Zapytania zwracają IEnumerable<T>, tylko szybko staje się to upierdliwe.

0
spartanPAGE napisał(a):

@up, czyli wcześniej jakoś sobie bez tego dawano radę.

Wcześniej dawano sobie radę bez myszy i monitorów, też ich nie używasz? ;)

Serio to:

Dictionary<Tuple<string, List<MySecretApplicationType<MyApplicationEntity>>>> data = new Dictionary<Tuple<string, List<MySecretApplicationType<MyApplicationEntity>>>>();

jest czytelniejsze od tego:

var data = new Dictionary<Tuple<string, List<MySecretApplicationType<MyApplicationEntity>>>>();

?

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