Просто двойная проверка моего понимания ссылки/значение семантики:Имеет значение T при передаче IEnumerable <T>?
Давайте говорить, что я сделал List<T> values = new List<T>();
Если T является ссылкой типа, то
values
содержит ссылку на коллекцию T. Однако каждый элемент этой коллекции является ссылкой на данные.Если Т является значения типа, то
values
содержит ссылку на коллекцию T. Однако каждый элемент этой коллекции содержит фактические данные.
Мое любопытство возникла потому, что я пытался разработать метод, который требует той или иной IEnumerable<T>
. Поэтому, если я даю ему List<int>
или List<SomeObject>
, он работает точно так же, тип T не имеет значения, и все довольны, так как это ссылка на коллекцию, которая предоставляется, да?
public sealed class Effect<T>
{
public void Apply(GameTime time, IEnumerable<T> values)
{
...
}
}
Также! Это не имеет никакого отношения к боксу, не так ли? Поскольку List<T>
имеет ссылочную семантику, только структурная реализация IEnumerable<T>
будет включать в себя бокс (но это похоже на катастрофу, ожидающую случиться)
В вашем классе 'Effect' либо метод, либо класс должен быть общим, т. Е.' Class Effect 'или' void Применить (...) '. –
Onur
Пока вы не добавляете 'int' в 'Список
Спасибо, обновлено. –