C# 传递IEnumerable时无所谓<;T>;?
只需再次检查我对引用/值语义的理解: 假设我做了一个C# 传递IEnumerable时无所谓<;T>;?,c#,.net,generics,collections,parameter-passing,C#,.net,Generics,Collections,Parameter Passing,只需再次检查我对引用/值语义的理解: 假设我做了一个List values=newlist() 如果T是引用类型,则值包含对T集合的引用。但是,该集合的每个元素都是对数据的引用 如果T是值类型,则值包含对T集合的引用。但是,此集合的每个元素都包含实际数据 我产生了好奇心,因为我试图设计一种需要IEnumerable的方法。因此,如果我给它一个列表或列表,它的工作方式完全相同,T的类型是不相关的,每个人都很高兴,因为它是对所提供集合的引用,是吗 public sealed class Effe
List values=newlist()代码>
- 如果T是引用类型,则
值
包含对T集合的引用。但是,该集合的每个元素都是对数据的引用
- 如果T是值类型,则
值
包含对T集合的引用。但是,此集合的每个元素都包含实际数据
我产生了好奇心,因为我试图设计一种需要IEnumerable
的方法。因此,如果我给它一个列表
或列表
,它的工作方式完全相同,T的类型是不相关的,每个人都很高兴,因为它是对所提供集合的引用,是吗
public sealed class Effect<T>
{
public void Apply(GameTime time, IEnumerable<T> values)
{
...
}
}
公共密封类效果
{
公共无效应用(游戏时间,IEnumerable值)
{
...
}
}
还有!这和拳击无关,对吧?由于List
具有引用语义,因此只有IEnumerable
的结构实现才会涉及装箱(但这似乎是一场即将发生的灾难)您的理解是正确的
我产生了好奇心,因为我试图设计一种需要IEnumerable
的方法。因此,如果我给它一个列表
或列表
,它的工作方式完全相同,T的类型是不相关的,每个人都很高兴,因为它是对所提供集合的引用,是吗
public sealed class Effect<T>
{
public void Apply(GameTime time, IEnumerable<T> values)
{
...
}
}
是,值
是对集合的引用。这不会影响其项目的性质
还有!这和拳击无关,对吧?由于List
具有引用语义,因此只有IEnumerable
的结构实现才会涉及装箱(但这似乎是一场即将发生的灾难)
对,;泛型集合的全部要点是完全避免装箱。列表本身和它的值类型项都没有装箱(除非列表本身是list
,在这种情况下,它的项是装箱的)。完美,我很高兴一切都很好。几乎感觉像是在浪费一个问题,但希望其他人能从中得到一些东西。谢谢在Effect
类中,方法或类需要是泛型的,即类Effect
或void Apply(…)
。只要不将int
添加到列表中,就不应该有装箱。