Pull to refresh

Comments 7

Код простой, но результат его для структур оказался неоднозначным.

System.Int32 myInt = 7;
 IList l = new List<int>();
 l.Add(myInt);

Вы на сигнатуру IList.Add не смотрели, что ли? Там входной параметр — object, при приведении любого value type к object происходит боксинг.

Все совершенно однозначно, что вас удивило?
уточню: для «без боксинга» надо использовать IList<int>

и вообще не надо включать пространство
using System.Collections; // не генерики

иначе такие косяки и всплывают. Для них лучше явно (UGLY) использовать
System.Collections.IList l = new List<int>();

по умолчанию в новых файлах (Add\New Class...) добавляется только пространство с генериками (VS2013+. ниже проверить не могу)
using System.Collections.Generic;
и вообще не надо включать пространство System.Collections иначе такие косяки и всплывают.

То есть то, что сигнатуры классов различаются — не останавливает, что ли?
если заюзать то пространство, то сигнатуры компилятором кушаются на ура: ты указал просто IList, он и будет использоваться
если не юзать пространство с «негенериками», то при виде просто IList компилятор матюкнется, и избежим косяка
Using the generic type 'System.Collections.Generic.IList' requires 1 type arguments
Может просто не надо указывать типы, не подумав, какие именно нужны?
может быть и вариант «хочу работать с коллекцией через интерфейсы»
я комментил вариант «хочу работать с коллекцией через интерфейсы без боксинга»
в общем, думаю, до него дошло в любых вариантах :)
может быть и вариант «хочу работать с коллекцией через интерфейсы»

Необходимости думать он не отменяет, даже наоборот.
Sign up to leave a comment.

Articles