Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递IEnumerable时无所谓<;T>;?_C#_.net_Generics_Collections_Parameter Passing - Fatal编程技术网

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
添加到
列表中,就不应该有装箱。